0

Ich habe eine URL zu einem WebAPI, wie folgt aus:url von WebAPI, wie in mvc konfigurieren

http://Dynamicweb8724.nl/webapi/NavToDW/?process=" 

und im MVC-Projekt Ich habe diese Dateien:

public class RouteConfig 
{ 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "DefaultApi", 
      url: "DefaultApi/{action}/{id}", 
      defaults: new { controller = "Guestbook", action = "Index", id = UrlParameter.Optional, PageID = 1067 } 
     ); 

    } 
} 

public class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 

     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

    }  
} 

und die globale .asax-Datei:

public class Global : System.Web.HttpApplication 
{ 
    public void Application_Start(object sender, EventArgs e) 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 

     ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.RazorViewEngine()); 
     ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.WebFormViewEngine()); 
     // Fires when the application is started 
     Dynamicweb.Frontend.GlobalAsaxHandler.Application_Start(sender, e); 

     GlobalConfiguration.Configuration.EnsureInitialized(); 
    } 

    public void Session_Start(object sender, EventArgs e) 
    { 
     // Fires when the session is started 
     Dynamicweb.Frontend.GlobalAsaxHandler.Session_Start(sender, e); 
    } 

    public void Application_BeginRequest(object sender, EventArgs e) 
    { 
     // Fires at the beginning of each request 
     //GlobalAsax.Application_BeginRequest(sender, e); 
    } 

    public void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
     // Fires upon attempting to authenticate the use 
     Dynamicweb.Frontend.GlobalAsaxHandler.Application_AuthenticateRequest(sender, e); 
    } 

    public void Application_Error(object sender, EventArgs e) 
    { 
     // Fires when an error occurs 
     Dynamicweb.Frontend.GlobalAsaxHandler.Application_Error(sender, e); 
    } 

    public void Session_End(object sender, EventArgs e) 
    { 
     // Fires when the session ends 
     Dynamicweb.Frontend.GlobalAsaxHandler.Session_End(sender, e); 
    } 

    public void Application_End(object sender, EventArgs e) 
    { 
     // Fires when the application ends 
     Dynamicweb.Frontend.GlobalAsaxHandler.Application_End(sender, e); 
    } 

    public void Application_OnPreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     Dynamicweb.Frontend.GlobalAsaxHandler.Application_OnPreRequestHandlerExecute(sender, e); 
    } 
} 

So kann ich verbinden. Aber ich kann nicht auf den spezifischen Link gehen, wie folgt aus: http://dynamicweb8724.nl/webapi/NavToDW/?process=

das Ergebnis ist folgendes:

This XML file does not appear to have any style information associated with it. The document tree is shown below. 
<Error> 
<Message>An error has occurred.</Message> 
<ExceptionMessage> 
The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code. 
</ExceptionMessage> 
<ExceptionType>System.InvalidOperationException</ExceptionType> 
<StackTrace> 
bij System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() bij System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) bij System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) 
</StackTrace> 
</Error> 

Controller:

public class GuestbookApiControllerController : ApiController 
{ 
    // GET: GuestbookApiController 
    public IEnumerable<GuestbookEntry> Get() 
    { 
     return ItemManager.Storage.GetByParentPageId<GuestbookEntry>(1067); 
    } 
} 

Also, was ich ändern muss?

Aber wenn ich legte einen Haltepunkt an dieser Methode:

public void Application_Start(object sender, EventArgs e) 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 

      ViewEngines.Engines.Clear(); 
      ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.RazorViewEngine()); 
      ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.WebFormViewEngine()); 
      // Fires when the application is started 

      //GlobalConfiguration.Configuration.MapHttpAttributeRoutes(); 
      GlobalAsaxHandler.Application_Start(sender, e); 
      GlobalConfiguration.Configuration.EnsureInitialized(); 
     } 

traf es doesnt.

+0

Wo ist Ihr 'ApiController' Code? –

+0

Sorry, aber es gibt keinen ApiController – InfinityGoesAround

+1

Warum konfigurieren Sie Web-API, wenn Sie es nicht verwenden, dann? Jeder Controller in Web-API * muss von ApiController erben. Ich empfehle Ihnen dringend, mehr über Web API zu lesen, da es viele Probleme mit Ihrem Code gibt und sie nicht adressierbar sind, wenn Sie das Thema nicht kennen. –

Antwort

0

Ihre Routenkonfiguration für den WebApi muss korrigiert werden. Sie haben die gewünschte Routenvorlage in den Namen der Route und nicht in die Vorlage selbst eingefügt.

die beabsichtigte URL Gegeben ...

http://Dynamicweb8724.nl/webapi/NavToDW/?process=" 

Es gibt ein paar Änderungen, die Sie vornehmen müssen.

Zuerst muss Ihr api-Controller in der Lage sein, den Parameter process zu akzeptieren, und ich würde auch den Controller umbenennen, um der Konvention zu folgen.

public class GuestbookApiController : ApiController 
{ 
    // GET: GuestbookApi 
    public IEnumerable<GuestbookEntry> Get(int process) 
    { 
     return ItemManager.Storage.GetByParentPageId<GuestbookEntry>(process); 
    } 
} 

Und schließlich müssen Sie die beabsichtigte URL der Controller-Aktion richtig zuordnen.

public class WebApiConfig { 
    public static void Register(HttpConfiguration config) { 

     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 

     //This will map to the intended controller 
     config.Routes.MapHttpRoute(
      name: "GuestBookApiRoute", 
      routeTemplate: "webapi/NavToDW", 
      defaults: new { controller = "GuestbookApi" } 
     ); 

     //This is the default api route 
     config.Routes.MapHttpRoute(
      name: "DefaultWebApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

    }  
} 

Das obige Beispiel zeigt, wie man konventionsbasiertes Routing durchführt. Dies können Sie auch mit dem Attribut-Routing erreichen. Sie können sich etwas Zeit nehmen und sich über das Thema informieren, wenn Sie das Attribut-Routing durchführen möchten.

+0

Hallo, danke. Aber ich bearbeite den Beitrag. – InfinityGoesAround

Verwandte Themen