MVC 不只路由到我的控制器的一个操作结果吗?

MVC not routing to only one of my Controller's Action Result?

我有一个非常奇怪的问题,我想不通。我不是路由专家,但这应该是直截了当的。

我有一个名为 NewsletterController 的控制器,它具有典型的 Index ActionResult。如果我 运行 我的站点处于调试模式并使用 link 转到我的时事通讯部分,我会收到 403.14 Forbidden 消息。如果我将 "Index" 添加到路由中,那么它将很好地转到 ActionResult。我以完全相同的方式使用 Index ActionResult 设置了其他控制器,并且工作正常。这是关于这个特定控制器的问题,它不工作,我只是看不出问题是什么。

这是我的控制器代码:

public class NewsletterController : Controller
{
    public ActionResult Index()
    {
        var vm = new NewsletterViewModel();
        ...CODE REMOVED FOR SPACE

        return View(vm);
    }
}

这是我 _Layout.cshtml 的 link 操作:

@Html.ActionLink("Newsletters", "Index", "Newsletter", null, new { @class = "nav-link" })

我的路线class

public class RouteConfig
{
    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 }
        );
    }
}

如果我去这里,我会收到 403.14 Forbidden 消息。

http://localhost:59571/Newsletter/

如果我将索引添加到它转到页面的路由。

http://localhost:59571/Newsletter/index

403.14 Forbidden 通常发生在您尝试浏览站点上的目录并且该网站未启用目录浏览功能且未配置默认文档时。

在这种情况下,当您尝试调用

时,您有一个实际的 Newsletter 文件夹与 NewsletterController 的默认路由冲突
http://localhost:59571/Newsletter/

它将尝试 return 该文件夹的实际内容,如果未启用该功能,它将失败。

删除文件夹或将文件夹重命名为与您的任何控制器名称不冲突的名称