您的位置:首页 > 编程语言 > ASP

ASP.NET MVC API 路由生成规则

2015-11-02 15:00 741 查看
我们都知道调用ASP.NET MVC的某些API函数(诸如:Url.Action、RedirectToAction等)可以生成URL,ASP.NET MVC会根据调用API函数时传入的参数去匹配系统定义的路由(Route),然后通过匹配成功的路由去生成相应的URL。

ASP.NET MVC会依次根据如下三个规则生成URL:

调用ASP.NET MVC API函数时传入的参数信息

当前请求的URL(就是Request.Url)和系统中定义路由匹配(按照路由表定义的顺序,从上往下匹配)后的匹配值

系统定义路由中路由参数的默认值

下面这篇文章通过一个例子来阐述ASP.NET MVC是怎么通过上面三点来生成URL。

首先我们在MVC系统中定义了如下两个路由

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Lang",
url: "Culture/{lang}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = 123 }
);

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}


运行ASP.NET MVC项目时,如果我们在浏览器地址栏上输入地址http://localhost/culture/en-us/Home/Index,那么这个地址会匹配上面第一个路由Lang(因为ASP.NET MVC的路由表是从上往下匹配的,如果某个路由匹配成功就不会再往下匹配了)。

如果我们现在在http://localhost/culture/en-us/Home/Index这个地址运行的View上(也就是HomeController下的Index这个View),调用Url.Action生成URL:

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@Url.Action("DoSomething")
</div>
</body>
</html>


那么我们来看看调用API时,ASP.NET MVC生成URL的步骤:

1.由于在调用API Url.Action时传入了参数DoSomething,所以路由中可以得到参数Action为DoSomething。

Action:DoSomething

2.当前请求的URL是http://localhost/culture/en-us/Home/Index,那么用这个地址从上往下去匹配系统定义的路由,匹配到第一个路由Lang时我们可以得到两个参数信息,Controller为Home,lang为en-us,那么现在我们得到的路由信息有:

Controller:HomeController

Action:DoSomething

lang:en-us

3.由于路由Lang中,我们定义了参数id有默认值123,所以最后我们得到的路由信息如下:

Controller:HomeController

Action:DoSomething

lang:en-us

id:123

现在根据最后得到的路由信息再去从上到下匹配系统定义的路由,那么首先匹配到路由Lang时,MVC发现Lang中每个路由参数现在都有值了,匹配成功,所以根据Lang生成的URL就如下图所示(注意:参数id由于是路由Lang中定义的默认值,所以最后没有在生成的URL中体现出来)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: