2016-03-04 62 views
1

我有一个MVC控制器,我定义这个Route属性来从URLMVC路由属性未按预期

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

当我使用以下网址View被正确地渲染的可选属性:

/碱/ SingleOffer

/碱/ SingleOffer?idOffer = 5

未找到

-

但是使用这个URL

/碱/ SingleOffer/5

具体的错误是

HTTP错误404.0当我得到一个错误您正在查找的资源已被删除,名称已更改或暂时不可用。

错误在哪里?

回答

2

它为我工作的方式是重命名RoutConfig.cs什么是属性的可选参数,所以你的情况的网址是: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 
+0

这样它的工作原理,但我更愿意用'Route'属性上的单个'ActionView' – Naigel

+0

@Naigel看到我的编辑 – Zaki

+0

谢谢你,现在的工作!我一直在WebApi2控制器中使用它,现在我在WebApiConfig.cs中看到有'config.MapHttpAttributeRoutes();',我猜这相当于在MVC中启用'Route'属性 – Naigel