wake-up-neo.com

404-Fehler nach dem Hinzufügen der Web-API zu einer vorhandenen MVC-Webanwendung

Hier gibt es eine gute Frage: Wie füge ich eine Web-API zu einem vorhandenen ASP.NET MVC 4-Webanwendungsprojekt hinzu?

Leider war es nicht genug, um mein Problem zu lösen. Ich habe zweimal versucht, um sicherzugehen, dass ich nichts falsch gemacht habe. Ich habe mit der rechten Maustaste auf "Controller" geklickt und das Element "Web API 2-Controller mit Aktionen unter Verwendung von Entity Framework" hinzugefügt, in dem ich meine Modellklasse und den DB-Kontext ausgewählt habe. Alles lief gut ... aber trotzdem ... jedes Mal, wenn ich versucht habe, auf/api/Rest zuzugreifen, wurde eine 404-Fehlermeldung ausgegeben (der Name meines Controllers ist RestController).

60
Luis Gouveia

Es funktioniert!!! Ich wollte nicht glauben, aber raten Sie mal, das Problem hing mit dem Global.asax-Routing zusammen order.

Während es nicht funktioniert mit:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 4th
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}      

Es funktioniert mit:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 2nd
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}      

Verrückt, ich weiß.

118
Luis Gouveia

Wenn Sie WebAPI in einem vorhandenen MVC (5) -Projekt verwenden möchten, müssen Sie die folgenden Schritte ausführen:
1. WebApi-Pakete hinzufügen:

Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
Newtonsoft.Json

2.Datei WebApiConfig.cs Zum Ordner App_Start Hinzufügen:

using System.Web.Http;

namespace WebApiTest
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

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

.Fügen Sie die folgende Zeile zu Glabal.asax Hinzu:

GlobalConfiguration.Configure(WebApiConfig.Register);

Wichtiger Hinweis: Sie müssen die obige Zeile genau nach AreaRegistration.RegisterAllAreas(); einfügen

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    //\\
    GlobalConfiguration.Configure(WebApiConfig.Register);
    //\\
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}
3
Mohammad Dayyan

"Wenn Sie neue Routen hinzufügen, denken Sie IMMER daran, dass Sie oben eine bestimmte Route und am Ende eine allgemeinere Route hinzufügen müssen. Andernfalls wird Ihre Web-App niemals eine ordnungsgemäße Weiterleitung erhalten."

Das Obige ist das Zitat von hier: http://www.codeproject.com/Tips/771809/Understanding-the-Routing-Framework-in-ASP-NET-MVC

Ich weiß, dass die Antwort bereits gegeben ist, aber dies könnte helfen, zu verstehen, warum wir GlobalConfiguration.Configure (WebApiConfig.Register) einfügen müssen. vor RouteConfig.RegisterRoutes (RouteTable.Routes);

2
Sergey