很多类似的问题,但没有一个像这个问题: 我在MVC5项目上使用属性路由。 在尝试定义这样的简单路线时:
[HttpGet]
[Route("Empresa/Filial/{id:int}/Editar")]
public ActionResult UpdateFilial(int id)
{
...
}
并在视图上生成一个URL,如下所示:
<a href="@Url.Action("UpdateFilial", "Empresa", new { id = filial.IDFilial })" title="@Lang.M("TitleEditar_Filial")" class="btn btn-xs btn-default">EDIT</a>
我最终得到的结果是:
http://localhost:59936/Empresa/Filial/Editar?id=1
导致404,因为它应该是:
"http://localhost:59936/Empresa/Filial/1/Editar"
我在这里做错了什么?
编辑:
我的RouteConfig看起来像这样:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//Acionando rotas por atributos (annotations)
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
(VisualStudio2017上MVC5模板的默认设置) 所以,我猜,属性路由优先于基于约定的路由。
答案 0 :(得分:0)
确保在基于约定的路由
之前在RouteConfig
中启用了属性路由
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//enable attribute routing
routes.MapMvcAttributeRoutes();
//convention-based routes
//...other routes
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}