【问题标题】:MVC not routing to only one of my Controller's Action Result?MVC 没有路由到我的控制器的操作结果之一?
【发布时间】:2018-05-15 02:45:04
【问题描述】:

我有一个非常奇怪的问题,我无法弄清楚。我不是路由专家,但这应该是直截了当的。

我有一个名为 NewsletterController 的控制器,它具有典型的 Index ActionResult。如果我在调试模式下运行我的网站并使用链接转到我的时事通讯部分,我会收到一条403.14 Forbidden 消息。如果我将“索引”添加到路线,那么它会转到 ActionResult 就好了。我以完全相同的方式使用 Index ActionResult 设置了其他控制器,并且工作正常。这个特定的控制器无法正常工作,我只是看不出问题出在哪里。

这是我的控制器代码:

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

        return View(vm);
    }
}

这是我的 _Layout.cshtml 中的操作链接:

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

我的路由类

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

【问题讨论】:

  • 项目中是否有实际的Newsletter 文件夹?这会导致路由冲突。
  • 宾果游戏!这就是问题所在。下次我一定要记住这一点。想弄清楚这一点肯定会让我发疯。谢谢!

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


【解决方案1】:

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

在这种情况下,您有一个实际的 Newsletter 文件夹,当您尝试调用时,它与 NewsletterController 的默认路由冲突

http://localhost:59571/Newsletter/

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

删除或重命名文件夹,使其与您的任何控制器名称都不冲突

【讨论】:

  • 你的意思是根目录下有“Newsletter”文件夹?
  • @Adrian,正确。我在根目录中有一个名为“Newsletter”的文件夹,用于保存实际的 newsletter.pdf 文件。此外,我还有一个名为 NewsletterController 的控制器。这引起了现在完全有意义的冲突。我只是简单地将根文件夹重命名为“Newsletters”,一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多