为什么MapRoute搞砸了?

时间:2014-03-21 09:05:06

标签: asp.net-mvc controller actionlink

请记住我是asp.net mvc的新手,所以我知道也许我的问题很容易解决。 :)

我开始了一个基于MVC模式的新ASP.NET项目,我得到了整个HomeController和工作网站。所以我添加了一个新的Controller( CoursesController )和一个新路由。但它不起作用。

展示一些工作。

CoursesController.cs - 部分内容

public class CoursesController : Controller
{
    private readonly CourseStore _store = new CourseStore();

    //
    // GET: /Course/
    public ActionResult Index()
    {
        return View(_store.GetCourses());
    }

RouteConfig.cs

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

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

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

_ Layout.cshtml - 相关链接部分

<ul class="nav navbar-nav">
    <li>@Html.ActionLink("Home", "Index", "Home")</li>
    <li>@Html.ActionLink("About", "About", "Home")</li>
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    <li>@Html.ActionLink("Courses", "Index", "Courses")</li>
</ul>

结果 如果我点击_layout中的链接,我会发送到网址http://localhost/Courses/并收到回复您无权查看此目录或网页。。 但如果我手动将网址更改为http://localhost/Courses/Index,一切正常。

请记住,ActionLink仅生成http://localhost/Courses/

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

以下是用户WeTTTT粘贴的正确答案。

我相信你的网站根目录下有一个“课程”文件夹,这会导致网址根本没有点击mvc路由。解决此问题的一种快速方法是添加routes.RouteExistingFiles = true;,但这不是建议的,可能会导致其他问题。您是否希望/允许将“课程”文件夹名称更改为绕过路由的其他内容? - WeTTTT 3月21日12:11