国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - [譯]ASP.NET Core 2.0 路由引擎詳解

[譯]ASP.NET Core 2.0 路由引擎詳解

2020-05-18 13:45三生石上(FineUI控件) ASP.NET教程

本篇文章主要介紹了[譯]ASP.NET Core 2.0 路由引擎,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了ASP.NET Core 2.0 路由引擎詳解,分享給大家,具體如下:

問題

ASP.NET Core 2.0的路由引擎是如何工作的?

答案

創建一個空項目,為Startup類添加MVC服務和請求中間件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public void ConfigureServices(IServiceCollection services)
 
{
 
  services.AddMvc();
 
}
 
 
 
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 
{
 
  app.UseMvc(routes =>
 
  {
 
    routes.MapRoute(
 
      name: "goto_one",
 
      template: "one",
 
      defaults: new { controller = "Home", action = "PageOne" });
 
 
 
    routes.MapRoute(
 
      name: "goto_two",
 
      template: "two/{id?}",
 
      defaults: new { controller = "Home", action = "PageTwo" });
 
 
 
    routes.MapRoute(
 
      name: "default",
 
      template: "{controller=Home}/{action=Index}/{id?}");
 
  });
 
}

創建一個控制器HomeController,來演示常規路由:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class HomeController : Controller
 
{
 
  public IActionResult Index()
 
  {
 
    return Content("Home/Index");
 
  }
 
 
 
  public IActionResult PageOne()
 
  {
 
    return Content("Home/One");
 
  }
 
 
 
  [HttpGet]
 
  public IActionResult PageTwo()
 
  {
 
    return Content("(GET) Home/Two");
 
  }
 
 
 
  [HttpPost]
 
  public IActionResult PageTwo(int id)
 
  {
 
    return Content($"(POST) Home/Two: {id}");
 
  }
 
}

創建一個控制器WorkController,來演示特性路由:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[Route("work")]
 
public class WorkController : Controller
 
{
 
  public IActionResult Index()
 
  {
 
    return Content("Work/Index");
 
  }
 
 
 
  [Route("one")]
 
  public IActionResult PageOne()
 
  {
 
    return Content("Work/One");
 
  }
 
 
 
  [HttpGet("two")]
 
  public IActionResult PageTwo()
 
  {
 
    return Content("(GET) Work/Two");
 
  }
 
 
 
  [HttpPost("two/{id?}")]
 
  public IActionResult PageTwo(int id)
 
  {
 
    return Content($"(POST) Work/Two: {id}");
 
  }
 
}

討論

ASP.NET Core的路由引擎可以將傳入的請求映射到控制器和它們的方法中。這是通過向請求管道中添加路由中間件實現的,具體來說是使用IRouteBuilder將URL規則(模板)映射到一個控制器的方法。

路由模板

路由模板可以使用字面值和標記(標識路由參數)。在匹配一個路由時,字面值會嚴格匹配URL中的文本,而標記會被替換掉。

為了匹配一個模板,模板中必須包含控制器和方法標記以便定位控制器方法(這是MVC的核心信息)。模板中的其它標記被映射為方法的參數(通過模型綁定實現)。

當添加一個路由映射時,可以為標記提供缺省值。當模板中不包含控制器和方法標記時會很有用。模板也可以包含對應于方法參數的可選標記。

讓我們來看一個示例模板:

?
1
contact/{controller=Home}/{action=Index}/{id?}

注意如下幾點:

1.標記包含中大括號中。這里有三個標記,分別是controller,action和id。
2.模板中包含一個字面值contact,它會匹配URL中的文本。
3.已經為controller(Home)和action(Index)提供了默認值。
4.可選標記通過問號來聲明。

下面的URL會匹配這個模板:

  1. /contact/Home/Index/1: 所有標記都有值。
  2. /contact/Home/Index: 忽略了可選標記。
  3. /contact/Home: 忽略了action標記,將使用默認值Index。
  4. /contact: 忽略了controller和action標記,將分別使用其默認值Home和Index。

常規路由

常規路由為URL路徑建立一個約定, 例如給定一個模板:

1.第一個標記映射到控制器
2.第二個標記映射到方法
3.第三個標記映射到可選的方法參數id

你也可以從模板中省略控制器和方法,只要你為它們提供缺省值就行了。比如下面的路由會映射到地址/one,因為通過defaults提供了所需的控制器和方法標記:

?
1
2
3
4
5
6
7
routes.MapRoute(
 
    name: "goto_one",
 
    template: "one",
 
    defaults: new { controller = "Home", action = "PageOne" });

注:請將此特定路由添加到通用路由之前,因為路由是按照定義的順序執行的,一旦某個路由匹配成功,則整個匹配流程就會終結。

由于路由中間件只使用了控制器和方法標記來映射到一個控制器方法,因此同一個控制器中放置多個同名的的方法將會拋出異常。為了解決這個問題,可以使用方法上的IActionConstraint特性(比如HttpGet,HttpPost等特性):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[HttpGet("two")]
 
public IActionResult PageTwo()
 
{
 
  return Content("(GET) Work/Two");
 
}
 
 
 
[HttpPost("two/{id?}")]
 
public IActionResult PageTwo(int id)
 
{
 
  return Content($"(POST) Work/Two: {id}");
 
}

====start by sanshi=========================

為了觀察控制器中同名方法出現的異常,我們首先需要修改Configure()方法,添加開發時異常處理中間件: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 
{
 
  if (env.IsDevelopment())
 
  {
 
    app.UseDeveloperExceptionPage();
 
  }
 
 
 
  app.UseMvc(routes => ....);
 
}

修改HomeController: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public IActionResult PageTwo()
 
{
 
  return Content("(GET) Home/Two");
 
}
 
public IActionResult PageTwo(int id)
 
{
 
  return Content($"(POST) Home/Two: {id}");
 
}

看似很正常的重載函數,但是放到控制器中會拋出異常。

在瀏覽器地址欄敲入:http://localhost:65415/Home/PageTwo,觀看到異常頁面:

[譯]ASP.NET Core 2.0 路由引擎詳解

====end by sanshi=========================  

特性路由

特性路由通過直接為控制器和方法提供路由模板來實現。

我們可以使用[Route]或者[HttpGet](或者其他動詞)特性來指定模板。這些模板可以包含字面值和標記(不能包含控制器和方法標記)。

運行時,控制器的特性模板和方法的特性模板會被合并到一起,比如,在WorkController中,PageOne方法可以通過/work/one訪問:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Route("work")]
 
public class WorkController : Controller
 
{
 
  [Route("one")]
 
  public IActionResult PageOne()
 
  {
 
    return Content("Work/One");
 
  }
 
}

源代碼下載

原文:https://tahirnaushad.com/2017/08/20/asp-net-core-mvc-routing/

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/sanshi/p/7745679.html?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91高清视频 | 国产第一区二区三区 | 亚洲一区二区三区四区的 | 国产成人精品免高潮在线观看 | 日韩电影一区二区在线观看 | 美女在线视频一区二区 | 亚州中文 | 黄色毛片免费看 | 国产精品美女www爽爽爽软件 | 中文字幕一区二区三区久久 | 欧美午夜在线观看 | av久草| 色com| www午夜视频 | 成人特黄a级毛片免费视频 国产在线视频一区二区 | 狠狠操狠狠干 | 99看片| 欧美一区三区 | 爱免费视频| 一区二区三区在线播放 | 久久精品久久久 | 久久av综合 | 日本三级精品视频 | 欧洲一区二区三区精品 | 激情五月综合 | 在线亚洲一区 | 综合色爱| 成年人综合网 | 特级淫片日本高清视频免费 | 亚洲精品一二三 | 伊人精品在线 | 亚洲乱码国产乱码精品精的特点 | 日韩午夜在线 | 欧美a级成人淫片免费看 | 久久久久久久国产精品免费播放 | 国产欧美视频一区二区三区 | 久久久久久久av | 成人在线一区二区 | 久久精品成人 | 国产精品一区二区免费 | 91日日夜夜 |