2017-05-09 54 views
0

很多類似的問題,但沒有一個非常喜歡這個問題: 我在MVC5項目中使用屬性路由。 當試圖定義這樣一個簡單的途徑:Url.Action在屬性路由時生成錯誤的URL

[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 } 
     ); 
    } 
} 

(上MVC5模板默認的VisualStudio2017) 所以,我想,屬性路由擁有基於約定的路線的優先級。

+0

之前是否啓用屬性以公約爲基礎的路線前routeconfig.cs路由? – Nkosi

+0

有很多不同的事情可能發生,但是您沒有提供足夠的信息來確定問題。 1)名爲'EmpresaController'的控制器中的'UpdateFilial'方法? 2)是否有'UpdateFilial'的重載? 3)「filial.IDFilial」的值是int嗎?有一點是確定的 - 對Url.Action的調用與您提供的路由不匹配。不,AttributeRouting不優先於基於會議的路由 - 路由按照它們註冊的順序來考慮。期。 – NightOwl888

回答

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 } 
     ); 
    } 
} 
+0

看起來它已經是這樣了。棘手的事情... –