2017-02-24 8 views
0

Hallo Ich bin Web-API-Anwendung mit angularjs entwickeln. Ich habe drei Methoden in einem Controller und keiner von ihnen ruft an. Zum BeispielSo rufen Sie mehrere Get-Methoden in Web-API

public class usersController : ApiController 
    { 
     //First Get method. 
     [HttpGet] 
     [SuperAdmin] 
     [LoginCheck] 
     [ActionName("me")] 
     public HttpResponseMessage me() 
     { 
     } 

     //second Get method. 
     [LoginCheck] 
     [SuperAdmin] 
     public IHttpActionResult Get(int id) 
     { 

     } 

     //third Get method. 
     [HttpGet] 
     [LoginCheck] 
     [SuperAdmin] 
     public HttpResponseMessage Get(string role) 
     { 
     } 

Ich rufe unter Verwendung von Code unten.

this.getSubs = function() { 
     var role = "SUPER_ADMIN"; 
     //role is optional here 
     var url = '/api/users/' + role; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 
    this.getcurrentuser = function() { 
     var url = '/api/users/me/'; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 
    this.getSubsbyID = function (id) { 
     var url = '/api/users/' + id; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 

Mein Routing ist wie folgt.

Ich kann keine der drei Methoden mit angularjs aufrufen. Darf ich wissen, wo ich das Routing falsch mache? Jede Hilfe wäre willkommen. Danke

+0

Können Sie den Service (oder Controller), in dem Sie diese Methoden implementiert haben, veröffentlichen? Dieses Problem kann aus vielen Gründen, bitte, weitere Informationen liefern. – lealceldeiro

+0

Wenn du denkst, dass es sich um ein Routing-Problem handelt, dann poste dein Routing ebenfalls. – lealceldeiro

+0

Danke. Die Ressource konnte nicht geladen werden: Der Server reagierte mit dem Status 400 (Ungültige Anforderung) http: // localhost: 22045/api/users/SUPER_ADMIN –

Antwort

1

Zwei Dinge eins ist dies könnte ein Problem mit Ihren Anfragen eine CORS Anfrage sein. Möglicherweise müssen Sie CORS aktivieren. Zuerst möchten Sie das nugget-Paket Microsoft.AspNet.WebApi.Cors installieren und dann vor den Routing-Aufrufen Ihrer API-Konfigurationsdatei hinzufügen.

config.EnableCors(); 

Zweitens könnte es hilfreich sein, Ihr Routing so anzupassen, dass Attribut-Routing verwendet wird. WebApi unterstützt kein Action-Routing wie ein normaler MVC-Controller. Sie könnten einige Routing bereits Setup in Ihrer Konfigurationsdatei haben, so etwas wie

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

Dies Sie den Controller-Benutzer anrufen würde es ermöglichen, aber ich finde es problematisch, versucht, einen ApiController zu bekommen die entsprechende GET-Methode, um die Signatur zu nennen. Ich würde empfehlen, dass Sie Attribut-Routing verwenden. Wenn es nicht bereits vorhanden ist können Sie Attribut-Routing zu Ihrer Konfigurations hinzufügen

config.MapHttpAttributeRoutes(); 

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

Dann können Sie Setup Ihre HttpGet Attribut Routing wie so.

public class usersController : ApiController 
{ 
     //First Get method. 
     [HttpGet] 
     [SuperAdmin] 
     [LoginCheck] 
     [Route("api/users/me")] // this is your routing attribute 
     public HttpResponseMessage me() 
     { 
     } 

     //second Get method. 
     [LoginCheck] 
     [SuperAdmin] 
     [Route("api/users/{id:int}")] 
     public IHttpActionResult Get(int id) 
     { 

     } 

     //third Get method. 
     [HttpGet] 
     [LoginCheck] 
     [SuperAdmin] 
     [Route("api/users/{role}")] 
     public HttpResponseMessage Get(string role) 
     { 
} 

Hoffe das hilft.

+0

Danke. Ich rufe drei APIs beim Laden der Seite an. Bei 3 maligem Laden der Seite klicke ich auf dieselbe URL unten. [Route ("api/users/{role}")] public HttpResponseMessage Hole (String-Rolle) –

+0

Hast du deine Routing-Konfiguration aktualisiert und config.MapHttpAttributeRoutes(); Die [Route] funktioniert nur, wenn diese Zeile vorhanden ist. Auch dies muss vor jedem anderen Routing sein, aber nach config.EnableCors(); (Wenn Sie cors verwenden) – Woot

+0

Cors ich aktiviert und kein Problem. config.MapHttpAttributeRoutes(); ich habe. –