5

mam 2 kontrolerów, z których 1 jest WebAPI:Url.Action z WebAPI i kontrolera tras

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 
    } 
} 

Moje trasy są zarejestrowane w Global.asax następująco:

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

My trasa WebAPI jest zdefiniowany jako:

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

Podczas generowania URL poprzez @ Url.Action ("Usuń", "list"), ścieżka mogę to '/ lista/usuń'. Spodziewałem się wyboru trasy WebApi ("/ api/list/remove"), ponieważ trasy WebApi zostały zarejestrowane przed innymi trasami.

Jak mogę uzyskać @ Url.Action, aby zwrócić trasę WebApi zgodnie z oczekiwaniami?

+0

masz kontroler WebAPI w tym samym projekcie jako regulatora zakaz WebAPI? – DavidG

+0

Tak. Przestrzenie nazw są czymś.Controllers.WebAPI i coś.Controllers – Jason

+1

Czy próbowałeś użyć '@ Url.RouteUrl' z nazwą trasy DefaultApi? – py3r3str

Odpowiedz

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

To działa dla mnie! – Jamo

0

Dla każdego, który biegnie w poprzek nie działa zgodnie z oczekiwaniami ... Jeśli Twój adres URL jest generowany/List/usunąć? Httproute = DefaultApi

Sprawdź, czy trasy api są ładowane pierwszy! Zamówienie jest krytyczne.

Dodałem też ograniczenia do mojej internetowej trasie config pomóc wykluczyć trasy API:

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