【问题标题】:Url.Action generates wrong URL when Attribute Routing属性路由时 Url.Action 生成错误的 URL
【发布时间】: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


【解决方案1】:

确保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 }
        );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多