Web Appのルーティングメカニズム

9001 ワード

ASP.NET Web APIは、複数のクライアント(ブラウザとモバイルデバイスを含む)にアクセスできるHTTPサービスを容易に構築するためのフレームワークである。 ASP.NET Web APIは.NET Fraameweork上でRESTfulアプリケーションを構築するための理想的なプラットフォームである。
だから私たちはwebアプリを勉強したいなら、そのルートの仕組みを知るべきです。MVCとウェブアプリのルーティングメカニズムの主な違いは、ウェブアプリが使うのは、urlの経路ではなくhttp方法です。本稿では、ウェブアプリがどのようにcontrollerに写像されているかを実証します。 httpがお願いしました
webアプリルート    ウェブアプリではcontrollerはhttpを操作して要求するものである。その中のactionの方法は異なるhttp要請の方法に対応します。ウェブアプリがhttp要求を受信すると、ルーティングテーブルは要求を対応するaction方法にマッピングする。ルートテーブルの定義はアプリである。StartフォルダのWebAppliConfig.csクラスでは、ルートの定義は実はmvcと同じです。
 1 public static void Register(HttpConfiguration config)

 2 {

 3 // Web API configuration and services

 4 

 5 // Web API routes

 6 config.MapHttpAttributeRoutes();

 7 

 8 config.Routes.MapHttpRoute(

 9 name: "DefaultApi", //        

10 routeTemplate: "api/{controller}/{id}",//web api    

11 defaults: new { id = RouteParameter.Optional }

12 );

13 }
 
Global.asaxにルートを登録します。
1 protected void Application_Start()

2 {

3 AreaRegistration.RegisterAllAreas();

4 

5 WebApiConfig.Register(GlobalConfiguration.Configuration);//   api        mvc             。

6 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

7 RouteConfig.RegisterRoutes(RouteTable.Routes);

8 }
 
ウェブアプリフレームがhttp要求を受信すると、それは経路テーブルのテンプレートからこのURLに一致するように試みられ、もし一致しないと404のエラーが表示される。例えば私達が登録したこのテンプレートは住所にマッチします。
api/WebApi/WebApp/2222 api/Home/werwe
以下のものはマッチしません。これは彼らが少ないからです。
WebAppi WebAppi/2222 Home/werwe
このapi/のパラメータはmvcのルートと衝突しないようにするためです。もちろん自由に名前をつけてもいいです。
 要求されたアドレスが一致すると、ウェブアプリは、対応するcontrollerおよびactionを選択する。
  • 、テンプレート内の「controller」は、要求アドレス中のcontrollerに対応する。
  • 、ウェブアプリはhttp要求の方法によってこの方法の名前で始まるactionを見つけます。例えば、GET方法を要求するなら、webアプリはgetで始まると探します。 action、getname getdataなど。GET,POST,PUT,DELETEの4つの方法にのみ適用されます。もちろん他の方法も設定できます。controlerに属性を追加する必要があります。
  • 3、テンプレートの中のプレースホルダは、例えば、{id}が、伝来したパラメータに適合するために使用される。
  • たとえば:
    1 public class TestController : ApiController
    
    2 {
    
    3 public IEnumerable<TestModel> GetAllData() { }
    
    4 public TestModel GetDataById(int id) { }
    
    5 public HttpResponseMessage Delete(int id){ }
    
    6 public HttpResponseMessage Post(TestModel test){}
    
    7 public HttpResponseMessage Put(TestModel test){}
    
    8 }
    以下はhttpごとに対応するactionを要求する方法です。
     
     Http依頼方法
     対応するaction 
       url 
     パラメータ
     操作
     GET
       GetAllData/GetDataById
      api/webapi/1
     1
     取得
    POST
        ポスト
       api/webapi   
                   
     追加                   
    DELETE
     Delete 
     api/webapi
     
     削除
    PUT
     Put 
     api/webapi
     
     更新 
     
     
     
     
     
    action特性を設定してhttpの要求を受けます。これはgetの要求を受けます。actionの名前はgetの先頭を使わなくてもいいです。
    1 public class TestController : ApiController
    
    2 {
    
    3 [HttpGet]
    
    4 public IEnumerable<TestModel> Find() { }
    
    5 }
     
    その4つの要求以外のhttp要求または複数の要求も受け入れることができる。
    1 public class TestController : ApiController
    
    2 {
    
    3 [AcceptVerbs("GET", "HEAD")]
    
    4 public IEnumerable<TestModel> Find() { }
    
    5 
    
    6 [AcceptVerbs("MKCOL")]
    
    7 public void Deatil() { }
    
    8 }
     
    ウェブアプリのテンプレートをmvcで定義することもできます。例えば、
    1 routes.MapHttpRoute(
    
    2 name: "api",
    
    3 routeTemplate: "api/{controller}/{action}/{id}",
    
    4 defaults: new { id = RouteParameter.Optional }
    
    5 );
     
    これはapi/test/findとマッチできます。actionでactionの名前を定義することもできます。
    1 public class TestController : ApiController
    
    2 {
    
    3 [AcceptVerbs("GET", "HEAD")]
    
    4 [ActionName("test")]
    
    5 public IEnumerable<TestModel> Find() { }
    
    6 }
     それならapi/test/testはその方法に入ることができます。
    アクションを設定するなら
    1 public class TestController : ApiController
    
    2 {
    
    3 
    
    4 [NonAction]
    
    5 public IEnumerable<TestModel> Find() { }
    
    6 }
     webアプリは、テンプレートとマッチングしても起動されないactionとは思えない。