2015-04-14 13 views
15

Mam problem z dzielenie mojej aplikacji web-api w różnych dziedzinach (nie MVC obszary), używając nazw i RoutePrefixDifferent RoutePrefix, sama nazwa kontrolera

Aplikacja jest obsługiwana za pomocą Owin Samodzielny Host, aw moja klasa Startup Mam następujące.

HttpConfiguration config = new HttpConfiguration(); 
config.MapHttpAttributeRoutes(); 
app.UseWebApi(config); 

A moje dwa kontrolery, które testowałem z

[RoutePrefix("api/test")] 
public class TestController : ApiController 
{ 
    [Route("")] 
    public IHttpActionResult Get() 
    { 
     return Ok("api"); 
    } 
} 
[RoutePrefix("sync/test")] 
public class TestController : ApiController 
{ 
    [Route("")] 
    public IHttpActionResult Get() 
    { 
     return Ok("sync"); 
    } 
} 

Te dwa kontrolery żyją w dwóch różnych przestrzeniach nazw, API i Sync.

Kiedy próbuję uzyskać dostęp do dwóch kontrolerów z http://localhost/api/test i http://localhost/api/sync dostaję 404.

ale jeśli zmienić nazwę jednego z kontrolerów na przykład TestApiController wtedy oba działa.

Ktoś ma dobry pomysł, jeśli można robić to, co chcę?

Odpowiedz

15

Niestety, interfejs Web API znajduje kontrolery według nazwy klasy, ignorując przestrzeń nazw. Jest to znany problem i nie jest jednoznaczny z routingiem opartym na atrybutach.

Najłatwiejszym rozwiązaniem jest zdecydowanie uniknąć problemu i używać unikalnych nazw kontrolerów. Ale jeśli nie przeszkadza trochę fantazji, oto rozwiązanie:

https://blogs.msdn.microsoft.com/webdev/2013/03/07/asp-net-web-api-using-namespaces-to-version-web-apis/

+0

Ok. Dziękuję Ci. Odgadywanie unikalnych nazw jest drogą do zrobienia. –

+0

TO, walczyłem, aby dowiedzieć się, dlaczego moje pozornie poprawne trasy nie działają. Dziękuję Ci – Carlitrosss

Powiązane problemy