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と同じです。
Global.asaxにルートを登録します。
ウェブアプリフレームが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}が、伝来したパラメータに適合するために使用される。 たとえば:
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の先頭を使わなくてもいいです。
その4つの要求以外のhttp要求または複数の要求も受け入れることができる。
ウェブアプリのテンプレートをmvcで定義することもできます。例えば、
これはapi/test/findとマッチできます。actionでactionの名前を定義することもできます。
アクションを設定するなら
だから私たちは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を選択する。
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とは思えない。