2017-11-16 4 views
0
mit MVC5 zugreifen

Ich habe eine WebAPI,kann nicht WebAPI mit Controller-und Action-Namen

public class SystemHealtController : ApiController 
    { 
     [HttpGet] 
     public IHttpActionResult UpdateUsageDetail(string cpuUsage, string memoryUsage, string diskUsage) 
     { 

       // Do Stuff 

      return Ok(); 
     } 

RouteConfig auch Standardeinstellungen haben,

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

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Job", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 

Aber wenn ich zu API-URL navigieren, http://localhost:64384/API/SystemHealt/UpdateUsageDetail?cpuUsage=2&memoryUsage=4&diskUsage=76, erhalten folgender Fehler:

Das einzige, was ich vermute, ist, bevor Sie Controle erstellen r, ich installierte

Microsoft.AspNet.WebApi 

und dann deinstalliert als auch Verdacht, dass das Problem sein könnte. Aber auch nach der Deinstallation gab es keine Fehler.

+0

Sie haben MVC-Routen und keine Web-API-Routen angezeigt (siehe [diesen Artikel] (https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and) -actions/routing-in-aspnet-web-api) für die Einrichtung. –

+0

Der erste Code ist Web API Route und der zweite Code ist MVC Route Config. Zeigen Sie Ihre API-Route (gestartet mit 'public static void Register' in' WebApiConfig'-Datei). –

Antwort

2

Standardmäßig wird die Bahn api-Routing in der WebApiConfig Klasse registriert mit die Strecke Muster api/{controller}/{id}

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

Sie können sehen, dass es keine Aktion Methodenname ist. Auf die Methoden wird über das Verb zugegriffen (POST oder GET, die Art des Aufrufs, den Sie gerade ausführen). In der Regel werden Sie GET-Methoden (zum Lesen von Daten) und eine POST-Methode zum Bereitstellen von Daten (zum Erstellen/Aktualisieren von Daten) erstellen. Wenn Sie diese Endpunkte verwenden möchten, müssen Sie die gleiche URL verwenden, aber die HTTP-Methode wird anders sein (GET und POST)

So sollten Sie es wie

yourSiteBaseUrl/api/SystemHealt?cpuUsage=2&memoryUsage=4&diskUsage=76 

Dies sollte funktionieren zugreifen, vorausgesetzt, Sie haben Web-API in der App aktiviert. Wenn Sie die Web-API-Funktionalität manuell zu einem vorhandenen MVC-Projekt hinzufügen, führen Sie die unter this post genannten Schritte aus, um dies zu tun.

Standardmäßig wird die Routenregistrierung in RouteConfig für MVC-Controller verwendet.

0

haben Sie versucht, ein Routenpräfix zu setzen?

[RoutePrefix("api/SystemHealt")] 
public class SystemHealtController : ApiController 
{ 
    [HttpGet] 
    public IHttpActionResult UpdateUsageDetail(string cpuUsage, string 
    memoryUsage, string diskUsage) 
    { 

      // Do Stuff 

     return Ok(); 
    }