日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ASP.NET Core MVC/WebAPi如何构建路由?

發布時間:2025/4/16 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core MVC/WebAPi如何构建路由? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本節我們來講講ASP.NET Core中的路由,在講路由之前我們首先回顧下之前所講在ASP.NET Core中的模型綁定這其中有一個問題是我在項目當中遇見的,我們下面首先來看看這個問題。

回顧ASP.NET Core模型綁定

我們有這樣一個場景:修改個人資料中的各個屬性,此時每個屬性的值的類型肯定是不一樣的,所以我們將值定義為object,如下model。

public class BlogViewModel{public string prop { get; set; }public object value { get; set; }}

我們在前臺進行提交,如下:

<script type="text/javascript">$(function () {var model = { prop: "Jeffcky", value: "cnblogs" };$("#btn").on("click", function () {$.ajax({url: "/home/index",type: "post",contentType: "application/x-www-form-urlencoded;charset=utf-8",dataType: "json",data: model,success: function (data) {}});});}); </script>

我們在后臺接收傳遞的對象。

[HttpPost]public IActionResult Index(BlogViewModel model){ return View();}

此時我們看到將值類型定義為object根本接收不到值,當我將其修改為string肯定是好使的。之前以為利用表單接收任何對象都是好使的,在實際應用時卻不如我們所期望的那樣(對于此種情況暫時未找到解決方案)。在這種情況下我只好利用contentType:"application/json"來解決,如下:

$(function () {var model = { prop: "Jeffcky", value: "cnblogs" };$("#btn").on("click", function () {$.ajax({url: "/home/index",type: "post", contentType: "application/json;charset=utf-8",dataType: "json",data: JSON.stringify(model),success: function (data) {}});});}); [HttpPost]public IActionResult Index([FromBody] BlogViewModel model){return View();}

只能轉換思維來解決,好了到了這里我們對于對象利用模型綁定遇到的問題到此結束,接下來我們開始講述路由。?

ASP.NET Core MVC/WebAPi路由作用?

無論是在ASP.NET MVC/WebAPi還是ASP.NET Core MVC/WebAPi,我們都一直在講路由,為什么每次都要拿出來說呢,因為它重要,從前臺到后臺的數據交互需要通過路由解決,所以我們需要在ASP.NET Core重點拿出來講,我們得好好說說路由的好處是什么呢,請往下看。

(1)SEO

SEO即Search Engine Optimization,我們翻譯過來就是搜索引擎優化,引入路由就是為了呈現友好的SEO,一個友好的SEO即能夠非常準確的描述需要請求的資源,對于用戶而言它能更好的去獲取想要的內容,可以增加網址訪問的次數,當然了也可以是網址易于收錄到搜索引擎中。

(2)URL不需要映射到文件

如果沒有路由的話,如果過來一個請求此時需要映射到磁盤上真實存在的物理文件,有了路由我們可以完全控制過來的請求,當一個確定的HTTP請求過來時我們可以引導到其到某個控制器上對應的action方法。

(3)長的URL和擴展都將會被淘汰

我們能夠知道當我們訪問一個頁面時有些直接以擴展名為.aspx或者html呈現,現在我們有了路由,完全不需要擴展名并且會縮短URL的長度。

好了我們講完路由的好處,我們就要看看在ASP.NET Core中的路由到底是怎樣的呢。

ASP.NET Core MVC/WebAPi路由方式

創建默認路由

這個就不用多講了,當我們創建ASP.NET Core應用程序時在Startup中就會創建默認的路由如下:

public class Startup {public void ConfigureServices(IServiceCollection services){services.AddMvc();}public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){ app.UseMvc(routes =>{routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");});} }

這是默認給我們創建的,看著有點不太舒服,我還是習慣將其修改如下等同的路由配置。

app.UseMvc(routes =>{routes.MapRoute(name: "default",template: "{controller}/{action}/{id?}",defaults: new { controller = "Home", action = "Index" }); });

擴展默認路由

上述只是我們創建的默認路由,當我們需要額外進行自定義擴展對于特定需求,所以我們如上類似再來擴展一個路由。

app.UseMvc(routes =>{
         //擴展路由routes.MapRoute(name: "about-route",template: "about",defaults: new { controller = "Home", action = "About" });routes.MapRoute(name: "default",template: "{controller}/{action}/{id?}",defaults: new { controller = "Home", action = "Index" });});

使用路由特性

我們也可以配置路由特性針對控制器和Action方法,如下:

[Route("[controller]")]public class HomeController : Controller{private IBlogRepository _blogRepository;public HomeController(IBlogRepository blogRepository){_blogRepository = blogRepository;}[Route("[action]")]public IActionResult Index(){return View();}[Route("Index")][HttpPost]public IActionResult Index([FromBody] BlogViewModel model){return View();}}

上述[Route("[controller]")]和[Route("[action]")])都是引用的聲明的控制器名稱和方法名稱,即Home控制器和Index方法,所以上述兩個action方法都是匹配的/Home/Index只是請求方式不同而已。在官網中有使用路由中間件的方式,有需要的可以參考一下:【https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing】

RESTful風格路由?

對于RESTful風格路由我們更多的是用在請求ASP.NET Core WebAPi接口上,如下:

[Route("api/[controller]")]public class Blog : Controller{[HttpGet] // api/blogpublic IEnumerable<string> Get(){return new string[] { "hello", "world!" };}[HttpPost("Post")] // api/blog/postpublic IActionResult PostBlog([FromBody] BlogViewModel model){return View();}}

那么問題來了,如果是有參數我們該進行如何傳遞呢,當然有解決方案,如下:

[HttpPost("{id}")]public void PostUpdate(int id, [FromBody] string value){}

此時前臺請求如下:

$("#btn").on("click", function () {$.ajax({url: "/api/blog/2",type: "post",contentType: "application/json;charset=utf-8",dataType: "json",data: JSON.stringify("Jeffcky"),success: function (data) {}});});

使用約束?

對于參數類型是否非法,我們通過對參數進行約束來達到我們得目的,如下:

[HttpPost("{id:int}")]public void PostUpdate(int id, [FromBody] string value){}

或者對參數約束為guid,如下:

[HttpPost("{id:guid}")]public void PostUpdate(string id, [FromBody] string value){}

當然還有其他類型參數約束就不一一列舉了。

總結?

本節我們講解了ASP.NET Core中的路由使用,比較基礎性的東西,更深入的東西參看官網資料,如若有不太理解和有所疑惑的地方請在評論中指出看到會馬上回復。

總結

以上是生活随笔為你收集整理的ASP.NET Core MVC/WebAPi如何构建路由?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。