MVC Route属性未按预期工作

时间:2016-03-04 10:01:13

标签: asp.net asp.net-mvc

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

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

使用以下网址时,View会正确呈现:

  

/碱/ SingleOffer

     

/碱/ SingleOffer?idOffer = 5

但是在使用此网址时出现错误

  

/碱/ SingleOffer / 5

特别是错误是

  

HTTP错误404.0 - 未找到

     

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

错误在哪里?

1 个答案:

答案 0 :(得分:2)

它对我有用的方法是将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