【问题标题】:MVC Controller routing catch all requestsMVC 控制器路由捕获所有请求
【发布时间】:2014-05-27 05:23:59
【问题描述】:

我有这个路由代码:

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

            routes.MapRoute(
                name: "Default",
                url: "{*anything}",
                defaults: new { controller = "WebCache", action = "Get" }
            );
        }
    }

它适用于这样的路径:somesite.com/regular/path,但目前我尝试获取图像somesite.com/imagetest.jpg,例如,它总是返回 404 not found,甚至没有在控制器中输入我的操作。经过一些测试,我发现如果我插入任何类型的扩展名,它就会产生这种行为。如何将每个 HTTP 请求路由到一个控制器中的一个操作? (包括资源)。

我对 MVC 很陌生,所以如果可能的话,我希望能得到一些涉及基础知识的解释。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-4 controller routing


    【解决方案1】:

    尝试如下注释第一个 IgnoreRoute 语句:

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
                name: "Default",
                url: "{*anything}",
                defaults: new { controller = "WebCache", action = "Get" }
            );
        }
    }
    

    【讨论】:

    • 还是和以前一样,忽略对带扩展名的文件的请求。尽管文件实际上不在指定的路径中,但我希望它至少通过项目中唯一控制器中的唯一操作,它们的名称也在 MapRoute 中指定。
    • 为什么默认路由的url是{anything}而不是{controller}/{action},因为char ''是通配符?
    • 我需要将每个 HTTP 请求路由到一个控制器中的一个操作并自己处理该请求,我之前在没有 ASP 的 C# .NET 中使用 HttpListener 成功实现了这一点。但我的要求要求不使用 ASP.NET MVC。
    • 您是否在 global.asax 中注册了您的路线?希望帮助:stackoverflow.com/questions/8096937/…
    【解决方案2】:
    public class RouteConfigTest
    {
        public static void LoadRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}", 
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, catchAll = "" });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多