Asp.net mvc 创建自定义RouteBase类
我想知道下面代码中的Asp.net mvc 创建自定义RouteBase类,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我想知道下面代码中的HttpContext.Request.AppRelativeCurrentExecutionFilePath的功能是什么。请解释路由系统如何匹配请求的url: public override RouteData GetRouteData(HttpContextBase httpContext) { RouteData result = null; string requestedURL = string.Empty; for (int i =
HttpContext.Request.AppRelativeCurrentExecutionFilePath
的功能是什么。请解释路由系统如何匹配请求的url:
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData result = null;
string requestedURL = string.Empty;
for (int i = 0; i < urls.Length; i++)
{
if(httpContext.Request.AppRelativeCurrentExecutionFilePath.Contains(urls[i]))
{
requestedURL = httpContext.Request.AppRelativeCurrentExecutionFilePath;
break;
}
}
if (!string.IsNullOrEmpty(requestedURL))
{
result = new RouteData(this, new MvcRouteHandler());
result.Values.Add("controller", "CustomRoute");
result.Values.Add("action", "DirectCustomUrls");
result.Values.Add("customUrl", requestedURL);
}
return result;
}
public override RouteData GetRouteData(HttpContextBase-httpContext)
{
RoutedData结果=空;
string requestedURL=string.Empty;
for(inti=0;i
路由系统。匹配的第一条路由获胜,之后注册的所有路由将被忽略
因此,每个路由不是一个,而是三个独立的职责(无论路由是传入HTTP请求还是传出URL生成):
null
RouteData
对象,该对象由标准的MvcRouteHandler
支持
然后,它填充结果的路由值。对于MVC,controller
和action
是必需的,这些值可能包含其他内容,如主键、当前区域性、当前用户等
返回null
如果在传入请求与路由不匹配的情况下,CustomRoute
未能返回null
,则路由框架将永远不会检查默认
路由。这使得CustomRoute
极不灵活,因为它不能在配置中的任何其他路由之前注册
string requestedURL = string.Empty;
for (int i = 0; i < urls.Length; i++)
{
if(httpContext.Request.AppRelativeCurrentExecutionFilePath.Contains(urls[i]))
{
requestedURL = httpContext.Request.AppRelativeCurrentExecutionFilePath;
break;
}
}
if (!string.IsNullOrEmpty(requestedURL))
{
result = new RouteData(this, new MvcRouteHandler());
result.Values.Add("controller", "CustomRoute");
result.Values.Add("action", "DirectCustomUrls");
result.Values.Add("customUrl", requestedURL);
RouteData result = null;
// <snip>
if (!string.IsNullOrEmpty(requestedURL))
{
// <snip>
}
return result;
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new CustomRoute());
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}