5

我有2個控制器,其中1是的WebAPI:Url.Action用的WebAPI和控制器路由

public class ListController : ApiController 
{   
    public object Remove(string ListId, List<string> ItemIds) 
    { 
     //removed 
    } 
} 

public class ListController : Controller 
{   
    public object Remove(string ListId, List<string> ItemIds) 
    { 
     //removed 
    } 
} 

我的路線被登記在Global.asax如下:

WebApiConfig.Register(GlobalConfiguration.Configuration); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 

我的WebAPI路線定義爲:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

當生成通過@ Url.Action( 「刪除」, 「列表」)的URL,我得到的路徑是 '/列表/刪除'。我預計WebApi路由('/ api/list/remove')被選中,因爲WebApi路由在其他路由之前被註冊。

如何獲得@ Url.Action按預期返回WebApi路由?

+0

你有在同一項目作爲非的WebAPI控制器的WebAPI控制器? – DavidG

+0

是的。命名空間是東西.Controllers.WebAPI和something.Controllers – Jason

+1

你試圖使用'@ Url.RouteUrl'與路由名稱DefaultApi? – py3r3str

回答

2
@Url.Action("Remove", "List", new { httproute = "DefaultApi" }) 
+1

適合我! – Jamo

0

對於整個運行任何人這個工作不正常...如果你的URL爲/生成列出/刪除?httproute = DefaultApi

驗證您的API路由被首先裝!訂單至關重要。

我還添加了約束,以我的網絡的路由配置,以幫助排除API路線:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
    constraints: new { controller = @"(?!DefaultApi).*" } 
);