Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 创建自定义RouteBase类_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

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生成):

  • 匹配请求
  • 如果请求匹配,则提供一组路由值(或者在生成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 }
            );
        }
    }