【问题标题】:MVC Default Route not Working for ControllerMVC 默认路由不适用于控制器
【发布时间】:2016-10-07 17:51:16
【问题描述】:

我刚刚开始了一个新的 MVC 项目,默认路由似乎没有按我的预期工作。

路由配置:

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

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

我有一个ActionLink 使用@Html.ActionLink("Scripts", "Index", "Scripts") 进入“脚本”控制器上的“索引”操作。

public class ScriptsController : Controller
{
    public ActionResult Index()
    {
        var model = new IndexModel();
        .......
        return View(model);
    }
}

单击此链接时,浏览器会尝试导航到“http://localhost:1733/Scripts/”,并且浏览器会显示“目录列表被拒绝”错误。当我手动将 URL 更改为“http://localhost:1733/Scripts/Index”时,它工作正常。

默认路由不应该自动推断“索引”操作吗? 它似乎确实适用于作为默认 MVC 站点模板一部分的 ManageController 类(“http://localhost:1733/Manage”带来了 ManageControllerIndex ActionResult)

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    我猜你的应用根目录中有一个物理“Scripts”。您看到的错误消息是预期的行为。当/Scripts 的GET 请求到来时,IIS 不知道是返回(脚本的)目录内容还是让mvc 返回ScriptsController 结果。很混乱。

    您应该尽量不要将您的控制器命名为与物理目录名称相同。更改其中一个名称。

    如果您不想重命名其中任何一个,可以将 RouteExistingFiles 属性设置为 true 以告诉框架路由是否应处理与现有物理文件/目录匹配的 url。

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes();
    
            routes.MapRoute("Default", "{controller}/{action}/{id}",
                 new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    
            routes.RouteExistingFiles = true;
        }
    }
    

    您需要确保ScriptsController 中没有任何与物理文件/静态资源匹配的操作方法(例如:捆绑/最小化脚本资源名称)。

    【讨论】:

    • 项目根目录中有一个“Scripts”目录,它是默认 MVC 模板的一部分,用于保存 javascript 文件。此应用程序将处理管理 SQL 脚本,因此只是巧合的名称冲突。将控制器名称更改为 ScriptController 确实解决了这个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多