2017-02-28 9 views
9

Podążyłem za samouczkiem this, aby utworzyć usługę REST WebAPI.Nie zarejestrowano trasy HTTP innej niż OD

Następnie mogę załadować listę wszystkich kontaktów, wskazując na http://baseaddress/api/Contacts.

Potem dodaje następujący kod w metodzie in WebApiConfig.cs Register w celu umożliwienia końcowy OData:

config.Count().Filter().OrderBy().Expand().Select().MaxTop(null); 

ODataModelBuilder builder = new ODataConventionModelBuilder(); 
builder.EntitySet<Contact>("Contacts"); 
config.MapODataServiceRoute(
    routeName: "OData", 
    routePrefix: "odata", 
    model: builder.GetEdmModel()); 

I również dodać parametr [EnableQuery] na metodzie Contact.GetContacts(). W ten sposób, jestem w stanie do kwerendy dla poszczególnych kontaktów, takich jak ten:

http://baseaddress/odata/Contacts?$filter=startswith(Name,'A') 

i działa jak czar.

Niestety, kiedy kładę [EnableQuery], punkt końcowy WebAPI przestaje działać, pokazując zamiast następujący błąd:

No non-OData HTTP route registered. 

in System.Web.OData.Extensions.HttpConfigurationExtensions.GetNonODataRootContainer(HttpConfiguration configuration) 
in System.Web.OData.Extensions.HttpRequestMessageExtensions.GetRootContainer(HttpRequestMessage request, String routeName) 
in System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateRequestScope(HttpRequestMessage request, String routeName) 
in System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateRequestContainer(HttpRequestMessage request, String routeName) 
... 

Co należy zrobić, aby rozwiązać ten problem?

+0

Czy była na to jakaś odpowiedź? Znam ten sam problem. –

+0

@MichaelBowman Niestety nie – Teejay

Odpowiedz

10

I napotkał ten problem, a ponieważ pracuję z wstrzykiwanie zależności udało mi się rozwiązać ten problem poprzez dodanie GlobalConfiguration.Configuration.EnableDependencyInjection() do mojego startup.cs

ex.

using System.Web.OData.Extensions; 
public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     GlobalConfiguration.Configuration.EnableDependencyInjection(); 
    } 
} 
+0

Jeśli nie używasz GlobalConfiguration, zmodyfikować powyżej jak: 'var httpConfiguration = new HttpConfiguration();' 'httpConfiguration.EnableDependencyInjection ();' 'var request = new HttpRequestMessage (HttpMethod.Get , (Uri) Request.Url); ' ' request.SetConfiguration (httpConfiguration); ' –

0

W moim przypadku, mam powyższy błąd, mimo że miał oddzielny projekt, który nie miał kod OData wcale. To była bardzo dziwna wiadomość do zdobycia.

Moje rozwiązanie polegało na tym, że usunąłem wszystkie paczki z folderu packages. Potem znów zadziałało. Niektóre pakiety Odata wciąż znajdowały się w tym folderze.

Powiązane problemy