【问题标题】:MVC Route attribute not working as expectedMVC 路由属性未按预期工作
【发布时间】:2016-03-04 18:40:22
【问题描述】:

我有一个 MVC 控制器,我在其中定义了 Route 属性以从 URL 检索可选属性

[Route("Base/SingleOffer/{idOffer?}")]
public ActionResult SingleOffer(int? idOffer) {
    ...
    return View();
}

当我使用以下 URL 时,View 会正确呈现:

/Base/SingleOffer

/Base/SingleOffer?idOffer=5

但是我在使用这个网址时遇到了错误

/Base/SingleOffer/5

具体的错误是

HTTP 错误 404.0 - 未找到

您要查找的资源已被删除、名称已更改或暂时不可用。

哪里出错了?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    它对我有用的方法是将RoutConfig.cs 中的可选参数重命名为属性,因此在您的情况下,URL 将是:url: "{controller}/{action}/{idOffer}"

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

    或者:

    routes.MapMvcAttributeRoutes(); 添加到您的RouteConfig.cs,您可以使用属性路由,所有路径都可以正常工作(确保没有routes.MapRoute();,因为您想使用属性路由!)例如

    Base/SingleOffer            //idOffer would null
    Base/SingleOffer?idOffer=5  //idOffer would be 5
    Base/SingleOffer/5          //idOffer would be 5  
    

    【讨论】:

    • 这样可以工作,但我更喜欢在单个 ActionView 上使用 Route 属性
    • 谢谢,现在可以使用了!我一直在 WebApi2 控制器中使用它,现在在 WebApiConfig.cs 中看到 config.MapHttpAttributeRoutes();,我想这相当于在 MVC 中启用 Route 属性
    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 2016-08-19
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多