【问题标题】:Routing multiple URLs to the same view in ASP.NET MVC将多个 URL 路由到 ASP.NET MVC 中的同一视图
【发布时间】:2016-06-21 18:03:16
【问题描述】:

我在尝试配置我的 ASP.NET MVC 项目以将多个 URL 路由到同一个视图时遇到了一些麻烦。给定以下 URL:

localhost:1234
localhost:1234/Products
localhost:1234/Products/1
localhost:1234/Products/abcd
localhost:1234/Products/whatever

我希望每个都将用户路由到同一个视图(例如Products.cshtml)。

按照this site 上的示例,我用特殊的路由属性装饰了我的控制器操作:

[HttpGet]
[Route("Products/{id?}")]
public ActionResult Products(string id)
{
    return View();
}

在我的RouteConfig.cs 文件中,我设置了默认路由:

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

localhost:1234localhost:1234/Products 链接都有效,但这不适用于其余 URL。

【问题讨论】:

  • 你记得在初始化代码的某个地方调用MapMvcAttributeRoutes()吗?
  • @MattiVirkkunen 哦,天哪,我没有。这样就解决了一半的问题,但是我调用这个函数,默认链接已经失效了。
  • 您可以在默认路由之前添加另一个路由url: "Products/{id}",(具有相同的默认值)并删除[Route("Products/{id?}")]属性
  • @MattiVirkkunen 最终,我得到了您的建议,并包含了一个带有空白 URL 参数的新 routes.MapRoute 声明。你能发表你的评论作为答案吗?

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


【解决方案1】:

属性对我来说都是正确的,所以你可能只是忘记映射属性路由。记得在初始化代码中的某处调用MapMvcAttributeRoutes()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多