国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ASP.NET Core MVC 從入門到精通之路由

這篇具有很好參考價值的文章主要介紹了ASP.NET Core MVC 從入門到精通之路由。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。?經(jīng)過前幾篇文章的講解,初步了解ASP.NET Core MVC項目創(chuàng)建,啟動運行,以及ASP.NET Core MVC的命名約定,創(chuàng)建控制器,視圖,模型,接收參數(shù),傳遞數(shù)據(jù)等內(nèi)容,今天繼續(xù)講解ASP.NET Core MVC?路由等相關(guān)內(nèi)容,僅供學(xué)習(xí)分享使用。

ASP.NET Core MVC 從入門到精通之路由

?

?

什么是路由?

?

路由是一種機(jī)制,主要是用于檢查每一個用戶請求,將用戶請求映射到Action中,這一動作通過路由中間件來實現(xiàn)。ASP.NET Core MVC使用路由中間件來匹配傳入請求的URL并將它們映射到操作(Action方法)。

?

默認(rèn)路由

?

在通過模板創(chuàng)建ASP.NET Core MVC中,默認(rèn)會添加路由中間件,并提供一種默認(rèn)的路由映射規(guī)則和約束。

MapControllerRoute?用于創(chuàng)建單個路由。 單個路由命名為?default?路由。 大多數(shù)具有控制器和視圖的應(yīng)用都使用類似?default?路由的路由模板。如下所示:

 1 using Microsoft.AspNetCore.Server.Kestrel.Core;
 2 using System.Text.Encodings.Web;
 3 using System.Text.Unicode;
 4 
 5 var builder = WebApplication.CreateBuilder(args);
 6 
 7 // Add services to the container.
 8 builder.Services.AddControllersWithViews().AddJsonOptions(options =>
 9 {
10     options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
11 });
12 
13 builder.Services.Configure<KestrelServerOptions>(options =>
14 {
15     options.AllowSynchronousIO = true;
16 });
17 
18 var app = builder.Build();
19 
20 // Configure the HTTP request pipeline.
21 if (!app.Environment.IsDevelopment())
22 {
23     app.UseExceptionHandler("/Home/Error");
24     // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
25     app.UseHsts();
26 }
27 
28 app.UseHttpsRedirection();
29 app.UseStaticFiles();
30 //1. 添加路由中間件EndpointRoutingMiddleware
31 app.UseRouting();
32 
33 app.UseAuthorization();
34 
35 //2.為控制器和Action添加一種路由映射規(guī)則,包括名稱,規(guī)則,約束等
36 app.MapControllerRoute(
37     name: "default",
38     pattern: "{controller=Home}/{action=Index}/{id?}");
39 
40 app.Run();

在上述代碼中,創(chuàng)建默認(rèn)路由的關(guān)鍵代碼如下所示:

1 app.MapControllerRoute(
2     name: "default",
3     pattern: "{controller=Home}/{action=Index}/{id?}");

其中各個屬性說明:

  • name表示路由名稱,默認(rèn)值為default。
  • pattern 為匹配模板,默認(rèn)值為"{controller=Home}/{action=Index}/{id?}"。其中默認(rèn)controller=Home,表示缺省值為HomeController,action=Index,表示默認(rèn)缺省值為Index。id后面的?表示為可空類型,可以根據(jù)需要來填寫。

?

默認(rèn)路由示例

?

  • 如:/ 表示controller和action都采用默認(rèn)值,相當(dāng)于/Home/Index。
  • 如:/Hello表示只指定了controller,action為默認(rèn)缺省值,相當(dāng)于/Hello/Index。
  • 如:/Hello/Test/5 根據(jù)路由匹配規(guī)則,提取出controller=HelloController , action=Test , id =5 。如果剛好存在此controller和action,則匹配導(dǎo)航成功。

創(chuàng)建默認(rèn)路由的簡便寫法,可通過以下代碼替代上面的app.MapControllerRoute,如下所示:

1 //創(chuàng)建默認(rèn)傳統(tǒng)路由的簡便寫法
2 app.MapDefaultControllerRoute();

以上是傳統(tǒng)路由的示例。 之所以稱為傳統(tǒng)路由,是因為它為 URL 路徑建立了一個約定:

  • 第一個路徑段?{controller=Home}?映射到控制器名稱。
  • 第二段?{action=Index}?映射到操作名稱。
  • 第三段?{id?}?用于可選?id。?{id?}?中的???使其成為可選。?id?用于映射到模型實體。

此傳統(tǒng)路由映射具有以下特點:

  • 僅基于控制器和操作名稱。
  • 不基于命名空間、源文件位置或方法參數(shù)。

使用默認(rèn)路由進(jìn)行傳統(tǒng)路由可以創(chuàng)建應(yīng)用,而無需為每個操作提出新的 URL 模式,有助于簡化代碼。使 UI 更具可預(yù)測性。

?

多個路由

?

在實際應(yīng)用中,可以設(shè)置多個路由,為某些特定的需求設(shè)置專有路由。設(shè)置多個路由,如下所示:

1 //2.為控制器和Action添加一種路由映射規(guī)則,包括名稱,規(guī)則,約束等
2 app.MapControllerRoute(
3     name: "blog",
4     pattern: "blog/{*article}",
5     defaults: new { controller = "Blog", action = "Article" });
6 
7 app.MapControllerRoute(
8     name: "default",
9     pattern: "{controller=Home}/{action=Index}/{id?}");

在上述代碼中,名稱為blog的路由,雖然采用的是傳統(tǒng)路由,但只用于特定操作。

在創(chuàng)建多個路由時,以下幾點需要注意:

  • blog?路由比?default?路由具有更高的匹配優(yōu)先級,因為它最先添加。
  • 路由名稱為路由指定邏輯名稱,使用命名路由可以簡化 URL 創(chuàng)建,在應(yīng)用程序范圍內(nèi)必須唯一。
  • 默認(rèn)情況下,傳統(tǒng)路由依賴于順序。 一般情況下,具有區(qū)域的路由應(yīng)放在路由表中靠前的位置,因為它們比沒有區(qū)域的路由更具體。也就是:特殊的在前面,通用的在后面。

?

不明確操作

?

如果同一個請求有兩個action都滿足路由終結(jié)點的匹配,那么路由會進(jìn)行如下處理:

  • 選擇最佳的候選項。
  • 引發(fā)異常。

如下代碼,在請求時,會兩個都滿足路由匹配規(guī)則:

 1 /// <summary>
 2 /// 請求需要編輯的學(xué)生信息
 3 /// </summary>
 4 /// <param name="id"></param>
 5 /// <returns></returns>
 6 public IActionResult Edit(int id)
 7 {
 8     var student = new Student()
 9     {
10         Id = 1,
11         Name = "公子小六",
12         Age = 21,
13         Sex = ""
14     };
15     return View();
16 }
17 
18 /// <summary>
19 /// 編輯后保存學(xué)生信息
20 /// </summary>
21 /// <param name="id"></param>
22 /// <param name="student"></param>
23 /// <returns></returns>
24 public IActionResult Edit(int id, Student student)
25 {
26     //保存學(xué)生
27     return View();
28 }

那么路由中間件就會跑出異常,如下所示:

ASP.NET Core MVC 從入門到精通之路由

?

?在這種情況下,要解析正確的路由,需要通過Http謂詞來區(qū)分,只有當(dāng)請求為Post時,才會請求Edit(int id,Student student);其他請求時【一般為Get】,匹配Edit(int id)。添加Http謂詞后的代碼如下:

 1 /// <summary>
 2 /// 請求需要編輯的學(xué)生信息
 3 /// </summary>
 4 /// <param name="id"></param>
 5 /// <returns></returns>
 6 public IActionResult Edit(int id)
 7 {
 8     var student = new Student()
 9     {
10         Id = 1,
11         Name = "公子小六",
12         Age = 21,
13         Sex = ""
14     };
15     return View();
16 }
17 
18 /// <summary>
19 /// 編輯后保存學(xué)生信息
20 /// </summary>
21 /// <param name="id"></param>
22 /// <param name="student"></param>
23 /// <returns></returns>
24 [HttpPost]
25 public IActionResult Edit(int id, Student student)
26 {
27     //保存學(xué)生
28     return View();
29 }

?

屬性路由

?

屬性路由一般用于WebAPI,使用一組屬性將操作直接映射到路由模板,將應(yīng)用功能建模為一組資源。屬性路由使用[Route(template)]標(biāo)記于controller或action中,示例如下所示:

 1 public class TestController : Controller
 2 {
 3 
 4     [Route("Test1")]
 5     [Route("Test1/Index")]
 6     [Route("Test1/Index/{id?}")]
 7     public IActionResult Index(int id)
 8     {
 9         ViewBag.Id = id;
10         return View();
11     }
12 
13     public IActionResult Test()
14     {
15         return View();
16     }
17 }

運行程序,在瀏覽器中,輸入網(wǎng)址【https://localhost:7116/Test1/Index/10】,如下所示:

ASP.NET Core MVC 從入門到精通之路由

?

注意:屬性路由中,也可用標(biāo)記:[Route("[controller]/[action]")],效果可傳統(tǒng)路由一致。

屬性路由與傳統(tǒng)路由對比

經(jīng)過以上示例,屬性路由與傳統(tǒng)路由,主要由以下幾點差異:

  • ?屬性路由需要更多輸入才能指定路由,屬性路由自定義比較強(qiáng),更能精準(zhǔn)控制路由。
  • 傳統(tǒng)默認(rèn)路由會更簡潔地處理路由。?
  • 屬性路由優(yōu)先級高于傳統(tǒng)路由。對于屬性路由,控制器和操作名稱在操作匹配中不起作用,除非使用標(biāo)記替換。
  • 屬性路由支持定義多個訪問同一操作的路由,意味著每個路由屬性都與操作方法上的每個路由屬性相結(jié)合。
  • 屬性路由支持使用與傳統(tǒng)路由相同的內(nèi)聯(lián)語法,來指定可選參數(shù)、默認(rèn)值和約束。如:[HttpPost("product14/{id:int}")]

?

保留關(guān)鍵字

?

在ASP.NET Core MVC項目中,會有一些關(guān)鍵字,作為路由參數(shù)名稱,如下所示:

  • action
  • area
  • controller
  • handler
  • page

在 Razor 視圖或 Razor 頁面的上下文中保留以下關(guān)鍵字:

  • page
  • using
  • namespace
  • inject
  • section
  • inherits
  • model
  • addTagHelper
  • removeTagHelper

一個常見錯誤是使用?page?作為屬性路由的路由參數(shù)。 這樣做會導(dǎo)致與 URL 生成不一致和令人困惑的行為。錯誤示例如下所示:

1 public class TestController : Controller
2 {
3     [Route("/articles/{page}")]
4     public IActionResult ListArticles(int page)
5     {
6         return View(page);
7     }
8 }

?

Http謂詞和路由模板

?

在ASP.NET Core MVC項目中,具有以下幾種謂詞,用于區(qū)分不同的請求方式:

  • [HttpGet]
  • [HttpPost]
  • [HttpPut]
  • [HttpDelete]
  • [HttpHead]
  • [HttpPatch]

ASP.NET Core 具有以下路由模板:

  • 所有?HTTP 謂詞模板都是路由模板。
  • [Route]

?

混合路由:屬性路由與傳統(tǒng)路由

?

ASP.NET Core 應(yīng)用可以混合使用傳統(tǒng)路由和屬性路由。 通常,對為瀏覽器提供 HTML 頁的控制器使用傳統(tǒng)路由,對為 API 提供服務(wù) REST 的控制器使用屬性路由。

操作既支持傳統(tǒng)路由,也支持屬性路由。 通過在控制器或操作上放置路由可實現(xiàn)屬性路由。 不能通過傳統(tǒng)路由訪問定義屬性路由的操作,反之亦然。 控制器上的任何路由屬性都會使控制器中的所有操作使用屬性路由。

屬性路由和傳統(tǒng)路由使用相同的路由引擎。

以上就是ASP.NET Core MVC從入門到精通之路由的全部內(nèi)容,旨在拋磚引玉,一起學(xué)習(xí),共同進(jìn)步。文章來源地址http://www.zghlxwxcb.cn/news/detail-412638.html

到了這里,關(guān)于ASP.NET Core MVC 從入門到精通之路由的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ASP.NET Core MVC 從入門到精通之HttpContext

    ASP.NET Core MVC 從入門到精通之HttpContext

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2024年02月02日
    瀏覽(23)
  • ASP.NET Core MVC 從入門到精通之文件上傳

    ASP.NET Core MVC 從入門到精通之文件上傳

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2024年02月03日
    瀏覽(21)
  • ASP.NET Core MVC 從入門到精通之Filter

    ASP.NET Core MVC 從入門到精通之Filter

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2024年02月09日
    瀏覽(23)
  • ASP.NET Core MVC 從入門到精通之?dāng)?shù)據(jù)庫

    ASP.NET Core MVC 從入門到精通之?dāng)?shù)據(jù)庫

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2023年04月27日
    瀏覽(25)
  • ASP.NET Core MVC 從入門到精通之序列化

    ASP.NET Core MVC 從入門到精通之序列化

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2024年02月03日
    瀏覽(30)
  • ASP.NET Core MVC 從入門到精通之Razor語法

    ASP.NET Core MVC 從入門到精通之Razor語法

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2023年04月23日
    瀏覽(31)
  • ASP.NET Core MVC 從入門到精通之自動映射(二)

    ASP.NET Core MVC 從入門到精通之自動映射(二)

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2024年02月07日
    瀏覽(26)
  • ASP.NET Core MVC 從入門到精通之自動映射(一)

    ASP.NET Core MVC 從入門到精通之自動映射(一)

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 經(jīng)過前幾篇文章的講解,初步

    2024年02月07日
    瀏覽(31)
  • ASP.NET Core MVC 從入門到精通之接化發(fā)(二)

    ASP.NET Core MVC 從入門到精通之接化發(fā)(二)

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。?經(jīng)過前兩篇文章的講解,初步

    2023年04月10日
    瀏覽(23)
  • ASP.NET Core MVC 從入門到精通之接化發(fā)(一)

    ASP.NET Core MVC 從入門到精通之接化發(fā)(一)

    隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。 ? 經(jīng)過前一篇文章的講解,初

    2023年04月09日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包