【发布时间】:2017-10-07 03:51:52
【问题描述】:
很多类似的问题,但没有一个完全像这个问题: 我在 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 模板的默认设置) 所以,我猜,属性路由优先于基于约定的路由。
【问题讨论】:
-
在基于约定的路由之前是否在 routeconfig.cs 中启用了属性路由?
-
可能会发生很多不同的事情,但您没有在问题中提供足够的信息来确定问题。 1)
UpdateFilial方法是否在名为EmpresaController的控制器中? 2)UpdateFilial是否有重载? 3)filial.IDFilial的值是 int 吗?有一件事是肯定的 - 对Url.Action的调用与您提供的路线不匹配。不,AttributeRouting 不优先于基于约定的路由 - 路由按照注册的顺序进行考虑。期间。
标签: c# asp.net-mvc-5 asp.net-mvc-routing