mvc路由原理 php_asp.net core 系列 6 MVC框架路由(下)

a1c528091971623b590a2996e6928fa2.png

一.URL 生成

接着上篇讲MVC的路由,MVC 应用程序可以使用路由的 URL 生成功能,生成指向操作的 URL 链接。 生成 URL 可消除硬编码 URL,使代码更稳定、更易维护。 此部分重点介绍 MVC 提供的 URL 生成功能,并且仅涵盖 URL 生成工作原理的基础知识。 IUrlHelper 接口用于生成 URL,是 MVC 与路由之间的基础结构的基础部分。 在控制器、视图和视图组件中,可通过 Url 属性找到 IUrlHelper 的实例。

 // // mvc 框架的ControllerBase类下 //摘要: //Gets or sets the Microsoft.AspNetCore.Mvc.IUrlHelper. public IUrlHelper Url { get; set; }

1.1 传统路由下的url生成

下面示例中,通过使用IUrlHelper接口在index页面生成指向另一操作Destination的 URL超连接。

 [Route("Home/Index")] public IActionResult Index() { // Generates /Home/Destination var url = Url.Action("Destination"); var urlAddress = "Click on to the Destination"; ViewData["url"] = urlAddress; return View(); } public IActionResult Destination() { return View(); } // Index.cshtml  @Html.Raw(ViewData["url"].ToString())

当加载index页面后,点击超连接"Click on to the Destination" 将进入后台控制器的Destination操作中。

上面的 Url.Action 示例假定使用传统路由,但 URL 生成功能的工作方式与属性路由相似,只不过概念不同。 在传统路由中,路由值用于扩展模板。controller 和 action 的路由值通常出现在该模板中, 这种做法可行是因为通过路由匹配的 URL 遵守某项约定。 这里的扩展模板指的是routes.MapRoute来添加路由规则约定。

1.2 属性路由下的url生成

在属性路由中,controller 和 action 的路由值不能出现在模板中(也就是不会使用routes.MapRoute),它们用于查找要使用的模板。

 //首先不用传统路由,去掉了routes.MapRoute public void Configure(IApplicationBuilder app) { app.UseMvc(); } [Route("")] public IActionResult Index() { // Generates /custom/url/to/destination  var url = Url.Action("Destination"); var urlAddress = ""+url+""; ViewData["url"] = urlAddress; return View(); } [HttpGet("custom/url/to/destination")] public IActionResult Destination() { return View(); }

生成如下图所示 :所以会生成与httpget配置的路径一样,是因为属性路由下的url生成,它们用于查找要使用的模板。MVC 生成一个包含所有属性路由操作的查找表,并匹配 controller 和 action 的值,以选择要用于生成 URL 的路由模板。

42aeef49ce7795340fc10634bb6c54e4.png

1.3 根据action名称生成 URL

Url.Action (IUrlHelper . Action) 以及所有相关重载都基于这样一种想法:用户想通过指定控制器名称和操作名称来指定要链接的内容。

 [Route("")] public IActionResult Index() { // Generates /Home/Destination/1?color=red var url = Url.Action("Destination
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值