一、路由參數(shù)傳遞方式
1.1 查詢字符串參數(shù)
在路由中,查詢字符串參數(shù)是一種常見的方式傳遞信息。這種方式通過(guò)URL中的查詢字符串(?key1=value1&key2=value2)將參數(shù)附加到請(qǐng)求中。在ASP.NET Core中,可以通過(guò)以下方式在控制器動(dòng)作方法中接收查詢字符串參數(shù):
public class MyController : Controller
{
public IActionResult MyAction()
{
// 通過(guò)Request對(duì)象獲取查詢字符串參數(shù)
string parameter1 = HttpContext.Request.Query["param1"];
// 或者通過(guò)動(dòng)作方法的參數(shù)直接接收查詢字符串參數(shù)
public IActionResult MyAction(string param1, int param2)
{
// ...
}
// 示例URL:/MyController/MyAction?param1=value1¶m2=42
}
}
在上述例子中,查詢字符串參數(shù)通過(guò)HttpContext.Request.Query
對(duì)象獲取,或者通過(guò)在動(dòng)作方法的參數(shù)中直接聲明,系統(tǒng)將自動(dòng)進(jìn)行參數(shù)綁定。這種方式對(duì)于傳遞較少且非敏感信息非常方便。
1.2 路由值參數(shù)
路由值參數(shù)是通過(guò)路由模板定義的占位符來(lái)捕獲和傳遞的參數(shù)。在ASP.NET Core中,路由值參數(shù)通常由花括號(hào) {}
包圍,它們從URL中提取相應(yīng)的值。以下是路由值參數(shù)的使用方式:
public class MyController : Controller
{
// 路由模板包含{id},它將作為路由值參數(shù)傳遞給動(dòng)作方法
[HttpGet("Products/{id}")]
public IActionResult GetProductById(int id)
{
// 使用id參數(shù)執(zhí)行相應(yīng)的邏輯
}
// 示例URL:/Products/123
}
在上述例子中,{id}
是一個(gè)路由值參數(shù),它會(huì)從URL中匹配的位置提取相應(yīng)的值傳遞給GetProductById
方法的id
參數(shù)。路由值參數(shù)的使用使得動(dòng)作方法能夠根據(jù)URL的結(jié)構(gòu)動(dòng)態(tài)地處理不同的請(qǐng)求。
1.3 表單參數(shù)
表單參數(shù)是通過(guò)HTML表單提交的數(shù)據(jù),通常使用POST請(qǐng)求發(fā)送到服務(wù)器。在ASP.NET Core中,可以通過(guò)動(dòng)作方法的參數(shù)直接接收表單參數(shù)。以下是處理表單參數(shù)的基本示例:
public class MyController : Controller
{
// 顯示表單頁(yè)面
[HttpGet]
public IActionResult MyForm()
{
return View();
}
// 處理表單提交
[HttpPost]
public IActionResult MyForm(string username, string password)
{
// 使用接收到的表單參數(shù)執(zhí)行相應(yīng)的邏輯
// username和password是表單中的input元素的name屬性值
}
}
在上述例子中,MyForm
方法處理表單提交,通過(guò)參數(shù)username
和password
直接接收表單中相應(yīng)元素的值。這種方式稱為模型綁定,ASP.NET Core會(huì)自動(dòng)將表單數(shù)據(jù)綁定到方法參數(shù)。
二、路由生成
2.1 使用UrlHelper生成URL
在ASP.NET Core中,UrlHelper
是一個(gè)用于生成URL的實(shí)用程序類,它提供了生成各種類型URL的方法。以下是使用UrlHelper
生成URL的基本示例:
public class MyController : Controller
{
public IActionResult MyAction(int id)
{
// 使用UrlHelper生成URL
string url = Url.Action("MyAction", "MyController", new { id = id });
// 或者在視圖中使用
// string url = Url.Action("MyAction", "MyController", new { id = 42 });
// 執(zhí)行其他邏輯...
}
}
在上述例子中,Url.Action
方法用于生成MyController
控制器中的MyAction
動(dòng)作方法的URL,同時(shí)傳遞了id
參數(shù)。生成的URL將包含相應(yīng)的路由信息。這樣的方式非常靈活,可以確保生成的URL符合應(yīng)用程序的路由規(guī)則。
2.2 命名路由
命名路由是為特定路由規(guī)則分配一個(gè)唯一的名稱,以便在應(yīng)用程序中引用和生成URL時(shí)使用。在ASP.NET Core中,可以通過(guò)在路由配置中使用name
參數(shù)為路由指定名稱。以下是使用命名路由的示例:
public class MyController : Controller
{
// 命名路由配置
[HttpGet("Products/{id}", Name = "ProductDetails")]
public IActionResult GetProductById(int id)
{
// 執(zhí)行相應(yīng)的邏輯...
}
// 在其他地方引用命名路由
public IActionResult AnotherAction()
{
// 通過(guò)命名路由生成URL
string url = Url.RouteUrl("ProductDetails", new { id = 42 });
// 執(zhí)行其他邏輯...
}
}
在上述例子中,HttpGet
特性中的Name
參數(shù)為路由指定了名稱為ProductDetails
。在AnotherAction
方法中,可以使用Url.RouteUrl
方法通過(guò)命名路由生成URL,確保生成的URL符合ProductDetails
路由規(guī)則。這種方式在應(yīng)用程序中的路由配置較復(fù)雜時(shí)非常有用。
三、區(qū)域化路由
在 ASP.NET Core 中,區(qū)域化路由是一種將應(yīng)用程序分成多個(gè)區(qū)域,并為每個(gè)區(qū)域定義特定路由的技術(shù)。通過(guò)使用區(qū)域化路由,可以更好地組織和管理應(yīng)用程序的不同部分,同時(shí)提高應(yīng)用程序的可維護(hù)性和可擴(kuò)展性。
區(qū)域化路由通常是在 Startup.cs
文件中配置的,具體來(lái)說(shuō),是在 Configure
方法中使用 MapAreaControllerRoute
或 MapAreaRoute
方法來(lái)定義區(qū)域路由。例如:
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapAreaControllerRoute(
name: "areas",
areaName: "admin",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapControllers();
});
在上述代碼中,定義了一個(gè)名為 default
的路由,它對(duì)應(yīng)于根區(qū)域的控制器。然后,使用 MapAreaControllerRoute
方法定義了一個(gè)名為 areas
的區(qū)域路由,該區(qū)域的名稱為 admin
,并為該區(qū)域的控制器定義了相應(yīng)的路由規(guī)則。
另外,還可以通過(guò)在控制器上添加 Area
屬性來(lái)指定該控制器屬于哪個(gè)區(qū)域。例如:
[Area("admin")]
public class HomeController : Controller {}
這樣,當(dāng)請(qǐng)求到達(dá)該控制器時(shí),ASP.NET Core 將根據(jù) Area
屬性的值將其路由到相應(yīng)的區(qū)域。此配置允許通過(guò)URL指定語(yǔ)言/地區(qū),例如/en-US/Home/Index
,并在控制器和視圖中使用本地化資源。
四、路由中間件
路由中間件在ASP.NET Core中起著關(guān)鍵作用,它負(fù)責(zé)根據(jù)傳入的HTTP請(qǐng)求確定應(yīng)該由哪個(gè)控制器的哪個(gè)動(dòng)作方法來(lái)處理。以下是關(guān)于ASP.NET Core中路由中間件的一些關(guān)鍵概念:
- 路由中間件的位置: 路由中間件通常位于中間件管道中的早期位置,以確保在請(qǐng)求到達(dá)控制器之前進(jìn)行路由解析。
- 路由模板: 路由中間件使用路由模板定義路由規(guī)則,其中包括控制器、動(dòng)作方法以及其他可能的參數(shù)。
-
默認(rèn)路由: ASP.NET Core應(yīng)用程序通常包含一個(gè)默認(rèn)的路由規(guī)則,例如
{controller}/{action}/{id?}
,其中{controller}
表示控制器名,{action}
表示動(dòng)作方法名,{id?}
表示可選的參數(shù)。 -
路由參數(shù): 路由參數(shù)可以從URL中提取,包括路由模板中的占位符,例如
{controller}
、{action}
、{id}
。 - 路由匹配: 路由中間件根據(jù)請(qǐng)求的URL和路由規(guī)則,確定應(yīng)該由哪個(gè)控制器和動(dòng)作方法處理。
-
路由生成: 在應(yīng)用程序中,可以使用
Url.Action
或Url.RouteUrl
等方法通過(guò)路由生成器生成URL,確保符合路由規(guī)則。
// 通過(guò)路由生成器生成URL
string url = Url.Action("Index", "Home", new { id = 42 });
- 路由約束: 路由中間件支持使用約束來(lái)限制參數(shù)的格式、長(zhǎng)度、范圍等,以確保路由匹配的精確性。
-
區(qū)域路由: 路由中間件也支持區(qū)域路由,通過(guò)在路由規(guī)則中包含
{area}
占位符來(lái)實(shí)現(xiàn)。
[Area("Admin")]
public class AdminController : Controller
{
// ...
}
總體而言,路由中間件在ASP.NET Core中是非常關(guān)鍵的一部分,它使得應(yīng)用程序能夠根據(jù)傳入的請(qǐng)求路由到正確的控制器和動(dòng)作方法,實(shí)現(xiàn)靈活的URL處理和路由規(guī)則。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-810222.html
五、總結(jié)
總體而言,深入了解了如何優(yōu)雅地組織和處理Web應(yīng)用的URL結(jié)構(gòu),提升了應(yīng)用的可維護(hù)性和靈活性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-810222.html
到了這里,關(guān)于【ASP.NET Core 基礎(chǔ)知識(shí)】--路由和請(qǐng)求處理--路由概念(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!