真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

asp.netcoremvc中控制器和路由是什么

這篇文章主要講解了“asp.net core mvc中控制器和路由是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“asp.net core mvc中控制器和路由是什么”吧!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站設計、網(wǎng)站制作、蓮花網(wǎng)絡推廣、微信小程序定制開發(fā)、蓮花網(wǎng)絡營銷、蓮花企業(yè)策劃、蓮花品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供蓮花建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

1. 控制器

先在Controllers目錄下添加一個類,名叫:

public class DemoController
{
   public string Index()
   {
       return "你好";
   }
}
 

訪問地址:

http://localhost:5006/demo/index
 

如果不出意外的話,你應該能看到網(wǎng)頁上的"你好"兩個字。

再新建一個類:

using Microsoft.AspNetCore.Mvc;
public class NoContrl : Controller
{
   public IActionResult Index()
   {
       return Content("Test");
   }
}
 

結(jié)合兩個不常規(guī)的控制器類,讓我們初窺asp.net core MVC是如何識別控制器的。這正是我之前說的,約定優(yōu)于配置最好的體現(xiàn)。這個哲學最早也是為MVC提出來的,后來被.net framework引申到各個方面。

asp.net core mvc識別控制器,會在項目中發(fā)現(xiàn) 以Controller結(jié)尾的公開類或者繼承自Controller的公開類,并將這些類標記為控制器。當接到用戶或者界面轉(zhuǎn)交的請求時,程序從請求路徑中解析出控制器名稱,然后尋找 <控制器>Controller 或者 <控制器> : Controller 的類。

在默認情況下,一個訪問URL會在程序中解析成如下格式:

http://://[其他參數(shù)]
 

在上文中,我們知道了控制器的解析規(guī)則,那么現(xiàn)在看一下Action的解析規(guī)則:

在DemoController中添加如下方法:

public int TestInt()
{
   return 10;
}

public object TestObject()
{
   return new
   {
       Name = "TestObject",
       Age = 1
   };
}

public string TestPublic()
{
   return "成功訪問 TestPublic";
}

   protected string TestProtect()
{
   return "成功訪問 TestProtect";
}

private string TestPrivate()
{
   return "成功訪問 TestPrivate";
}
 

重新啟動,后依次訪問如下地址:

http://localhost:5006/Demo/TestInt
http://localhost:5006/Demo/TestObject
http://localhost:5006/Demo/TestPublic
http://localhost:5006/Demo/TestProtect
http://localhost:5006/Demo/TestPrivate
 

然后可以看到,TestInt、TestObject以及TestPublic均能正常訪問,但TestProtect和TestPrivate都提示找不到網(wǎng)頁或無法訪問。

可以看到,對于程序而言,Action就是控制器類里的公開類方法,與方法的返回值無關。也就是說,程序會找到 XXXController 或者名為XXX但繼承了Controller的類作為XXX的控制器,然后繼續(xù)在這個類里尋找到Action,如果沒有找到就會返回404的請求。

 

2. 路由

在第一節(jié)中,我們介紹了一下asp.net core mvc如何尋找控制器和Action,那這一節(jié)將介紹程序如何從請求鏈接中解析出控制器和Action的名稱,也就是路由映射。

路由(Routing)負責匹配傳入的HTTP請求,然后將這些請求發(fā)送給應用的可執(zhí)行終結(jié)點。終結(jié)點是應用的可執(zhí)行請求處理代碼單元,也就是我們控制器里的方法(Action)。

 

2.1 路由的配置

對于所有的asp.net core模板都包括生成在代碼中的路由。通常,我們要求路由在Startup.Configure方法中進行配置。

注意,Startup類里有且只有一個Configure方法,不能出現(xiàn)其重載版本。

該方法的聲明一般情況如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env);
 

如果想要設置路由,需要先注明項目啟用路由:

app.UseRouting();
 

然后使用如下方法配置路由:

app.UseEndpoints(endpoints =>
{
   // 配置路由
});
 

通常對于mvc項目而言,我們一般使用如下方式配置路由:

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

這行代碼的意思是:創(chuàng)建一個名字為 default 的映射控制器的路由,映射規(guī)則為 {controller}/{action}/{id?},也就是第一個為控制器,第二個為Action,第三個是ID,其中ID可以不存在,當Action無法從請求地址中解析出來時默認為Index,控制器默認為Home。

通過這個解析,我們可以得知 我們之前訪問的

http://localhost:5000/
 

是哪個控制器里的什么方法來處理了——HomeController.Index。

那么我們修改一下HomeController.Index來驗證一下,我們理解是否有誤:

public IActionResult Index()
{
   return View();
}
//  修改為
public IActionResult Index()
{
   return Content("測試");
}
 

重新運行程序,訪問

http://localhost:5000/
 

然后看到頁面出現(xiàn):測試字樣,可以看到路由系統(tǒng)自動為我們補全了控制器名和action名。如果方法中出現(xiàn)參數(shù),則自動按照參數(shù)名1=值1&參數(shù)名2=值2這種形式查看參數(shù)。Id為特殊的,會自動按照目錄去映射。所以:

http://localhost:5000/控制器1/方法1/id值
http://localhost:5000/控制器1/方法1?id=id值
 

是一個請求鏈接。

 

2.2 添加路由配置

那么,我們回過頭來看一下聲明路由的方法:

public static ControllerActionEndpointConventionBuilder MapControllerRoute(this IEndpointRouteBuilder endpoints, string name, string pattern, object defaults = null, object constraints = null, object dataTokens = null);
 

默認情況下,我們不會設置 defaults、constraints、dataTokens,這三個參數(shù)都有含義,這里不對后兩個做介紹,簡單介紹一下第一個:

在路由配置的方法里,添加以下內(nèi)容:

endpoints.MapControllerRoute(
                   name : "test",
                   pattern: "DemoTest/{action=Index}/{id?}",
                   defaults : new
                   {
                       Controller = "Demo",

                   });
 

至此,我們沒有創(chuàng)建名為DemoTest的控制器,但是我們在訪問:

http://localhost:5006/DemoTest

仍然能得到響應,而且控制器被解析為Demo。

這就是defaults的意義,路由在解析的時候,系統(tǒng)會把defaults中的值自動填充到路由連接中沒有設置的值里。

當我們設置多個路由的時候,路由系統(tǒng)會優(yōu)先嘗試匹配最容易解析的配置。比如說,當我們訪問:

http://localhost:5000/DemoTest/

的時候,路由系統(tǒng)會優(yōu)先從名為test的配置表中解析,只有當無法從這里找到時才會從其他路由中解析。

感謝各位的閱讀,以上就是“asp.net core mvc中控制器和路由是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對asp.net core mvc中控制器和路由是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!


分享標題:asp.netcoremvc中控制器和路由是什么
網(wǎng)站路徑:http://weahome.cn/article/gocjci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部