2

Hallo Ich entwickle Webapi-Anwendung und ich habe drei GET-Methoden in einem Controller. Ich kann 2 Methoden anrufen, aber die dritte kann ich nicht anrufen.Wie drei get-Methoden in einem Controller aufgerufen werden?

Unten sind meine Methoden, die ich anrufen kann.

[HttpGet] 
[Route("me")] 
public HttpResponseMessage me() 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me"); 
} 
URL:http://localhost:22045/api/user/me 

[HttpGet] 
public HttpResponseMessage getUser(int id) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get user"); 
} 

URL: http://localhost:22045/api/user/1 

Ich kann nicht unter eins anrufen.

[Route("user/{role}")] 
public HttpResponseMessage Get(string role) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
} 

Ich möchte es nennen wie

http://localhost:22045/api/user/OptionalRoleParameter 

Darf ich hier etwas Hilfe bekommen? Jede Hilfe wäre willkommen.

Antwort

2

Die Verwendung von Attributrouten mit Routeneinschränkungen sollte dabei helfen, die Routen ausreichend zu unterscheiden, um Konflikte zu vermeiden

Stellen Sie zunächst sicher, dass das Attribut-Routing aktiviert ist.

config.MapHttpAttributeRoutes(); 

Dann stellen Sie sicher, dass der Controller

[RoutePrefix("api/user")] 
public class UsersController : ApiController { 

    //GET api/user/me 
    [HttpGet] 
    [Route("me")] 
    public HttpResponseMessage me() { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get me"); 
    } 

    //GET api/user/1 
    [HttpGet] 
    [Route("{id:int")] // NOTE the parameter constraint 
    public HttpResponseMessage getUser(int id) { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get user"); 
    } 

    //GET api/user 
    //GET api/user/OptionalRoleHere 
    [HttpGet] 
    [Route("{role?}")] //NOTE the question mark used to identify optional parameter 
    public HttpResponseMessage Get(string role = null) { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
    } 
} 

Quelle das notwendige Attribut hat: Attribute Routing in ASP.NET Web API 2 : Route Constraints

+0

Vielen Dank. Es funktionierte. –

3

Optional Routenparameter als string

[Route("user/{role?}")] 
public HttpResponseMessage Get(string role) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
} 

Sie nicht string als optionale Parameter haben können, weil sie als Nullable-Einschränkung nicht unterstützt wird in Web API, diese Informationen für mehr sehen, Route Constraints in Web API

+0

Danke. Gibt es eine andere Möglichkeit, dies zu beheben? –

+0

Sie können eine benutzerdefinierte Route Constraint schreiben .. ein Beispiel ist in dem Link, den ich in der Antwort gegeben habe –

Verwandte Themen