c# - 尽管我绘制了路线,但仍然收到 404

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

我一直在处理一些有关路线的问题。我已经定义了路线,但我不断收到 404。以下是路线:

routes.MapRoute(
    name: "Default",
    url: "{controller}",
    defaults: new { controller = "Login", action = "Login" }
);

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

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

routes.MapRoute(
    name: "Act",
    url: "{controller}",
    defaults: new { controller = "Act", action = "New" }
);

localhost:51081/login works! 
localhost:51081/Home/25.04.2013 works! 
localhost:51081/act doesnt work! 
localhost:51081/calendar/index doesnt work!

这里“登录”和“主页”有效,但“日历”和“操作”无效。当我将“日历”映射移动到顶部时,“主页”映射不起作用。你如何映射你的页面?

基本上我不希望操作名称出现在网址上,例如:http://localhost:51081/Home/Home/25.04.2013。我希望看到它像http://localhost:51081/Home/25.04.2013 或 http://localhost:51081/calendar

最佳答案

就像 @MarcGravell 所说:您只需为异常(exception)情况添加特殊规则

在您的情况下,日历和主页的路线是相同的。 您可以通过将 {controller} 替换为 Home 来更具体地映射您的路线,因为该路线不是动态的并且实际上是一个异常(exception)(它忽略了操作)

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

行动与日历相同,因此您不需要两条路线。只需调用 Act/New 而不是仅调用 Act。

对于默认使用:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { controller = "Login", action = "Login" }
);

并将其放在偏离路线的底部。

关于c# - 尽管我绘制了路线,但仍然收到 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216606/

相关文章:

asp.net-mvc - 找不到键为 '<key>' 的资源对象。自动部署的 ASP.NET MVC3 应用程序

c# - 我可以为多选组合框创建 SelectedItems 属性吗

asp.net - 不显眼的 Javascript 富文本编辑器?

asp.net - 我无法让日期选择器工作

c# - 如何解决 "Input string was not in a correct format."错误?

javascript - 取消选中后面代码中 CheckedChanged 上的最后一个复选框

javascript - 如何将 Perfidies(浏览器插件漏洞扫描程序)集成到我的网站中?

c# - Visual Studio 智能感知显示我的属性的自定义选项

c# - .Net Core 2 中 GC 如何与 DI 一起工作

c# - 通过android查看在本地机器上运行的网站