webentwicklung-frage-antwort-db.com.de

Keine Nicht-OData-HTTP-Route registriert

Ich folgte dem Tutorial " this ", um einen WebAPI-Dienst REST zu erstellen.

Danach konnte ich die Liste aller Kontakte laden, indem Sie auf http://baseaddress/api/Contacts zeigen.

Dann habe ich in der Register-Methode in WebApiConfig.cs den folgenden Code hinzugefügt, um einen OData-Endpunkt zu aktivieren:

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());

Und fügte auch den [EnableQuery]-Parameter zur Contact.GetContacts()-Methode hinzu. Auf diese Weise kann ich bestimmte Kontakte wie folgt abfragen:

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

und es funktioniert wie charmant.

Wenn ich den [EnableQuery] setze, funktioniert der WebAPI-Endpunkt leider nicht mehr und zeigt stattdessen den folgenden Fehler an:

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)
...

Was muss ich tun, um das Problem zu beheben?

15
Teejay

Ich bin auf dieses Problem gestoßen und da ich mit Abhängigkeitsinjektionen arbeite, konnte ich dieses Problem lösen, indem ich GlobalConfiguration.Configuration.EnableDependencyInjection() meinem startup.cs 

ex.

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

Das Hinzufügen von config.EnableDependencyInjection() in Startup.cs hat für mich funktioniert.

var config = new HttpConfiguration();

config.EnableDependencyInjection();
3
jt03

Ich bin auf dieses Problem vor und durch das Hinzufügen der Zeile darunter gestoßen, hat es für mich funktioniert

protected void Application_Start()
            {  
         GlobalConfiguration.Configuration.EnableDependencyInjection();
             ....  }
2
Raed Noor

Ich habe diese Fehlermeldung erhalten, nachdem ich meine WebApi-Projektabhängigkeiten (NuGet) aktualisiert hatte:

  • Microsoft.AspNet.OData, version = "7.0.1"
  • Microsoft.OData.Core, version = "7.5.0"
  • Microsoft.OData.Edm, version = "7.5.0"
  • Microsoft.Spatial, version = "7.5.0"

Nach dem Downgrade auf die zuvor verwendeten Versionen war der Fehler wieder verschwunden:

  • Microsoft.AspNet.OData, version = "5.8.0"
  • Microsoft.OData.Core, version = "6.19.0"
  • Microsoft.OData.Edm, version = "6.19.0"
  • Microsoft.Spatial, version = "6.19.0"
1
Alexander

In meinem Fall habe ich den obigen Fehler erhalten, obwohl ich ein separates Projekt hatte, das überhaupt keinen Odata-Code hatte . Das war also eine sehr seltsame Nachricht. 

Meine Lösung war, lösche alle Pakete aus dem Ordner packagesDanach hat es wieder geklappt. Einige Odata-Pakete befanden sich noch in diesem Ordner. 

0
Hugo Nava Kopp

In meinem Fall hatte ich eine Website mit ODATA-Routen (und -Controllern) und anderen API-Routen (und -Controllern). Was geschah, war, dass meine anderen Routen nur mit ODATA-Routen in Konflikt standen, selbst mit unterschiedlichen C # -Namensräumen und -Klassen usw.

Anfangs war mein Controller zum Beispiel so:

public class UserController : ApiController
{
    [HttpPost]
    public void Create([FromBody] string email)
    {
    }
}

Ich hatte auch eine "User" -Route in ODATA (anderer Namespace, andere URLs usw.). Also musste ich explizit das Route-Attribut hinzufügen, wie folgt:

public class UserController : ApiController
{
    [HttpPost]
    [Route("api/user/create")]
    public void Create([FromBody] string email)
    {
    }
}
0
Simon Mourier

Ich habe auch diesen Fehler erhalten, und in meinem Fall war dies ein Problem mit der Groß- und Kleinschreibung. Ich hatte angerufen

https://www.example.com/odata/MyEntities statt 

https://www.example.com/odata/myentities, wie es registriert wurde.

Überprüfen Sie unbedingt Ihre Routenkonfiguration und die aufrufende URL.

0