2

嗨我正在開發webapi應用程序,我有一個控制器中的三個GET方法。我可以調用2種方法,但是我無法調用第三種方法。如何在一個控制器中調用三個get方法?

以下是我可以調用的方法。

[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 

我無法打到下面的一個。

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

我想這樣稱呼它

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

我可以得到一些幫助嗎?任何幫助,將不勝感激。

回答

2

使用具有路由約束的屬性路由應該有助於區分足夠的路由以避免衝突

首先確保啓用屬性路由。

config.MapHttpAttributeRoutes(); 

然後確保該控制器具有必要的屬性

[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"); 
    } 
} 

來源:Attribute Routing in ASP.NET Web API 2 : Route Constraints

+0

謝謝。有效。 –

3

可選路徑參數爲string

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

你不能有string作爲可選的參數,因爲它不支持作爲在的Web API可空的約束,看到這更多信息, Route Constraints in Web API

+0

謝謝。有沒有其他方法可以解決這個問題? –

+0

您可以編寫一個自定義的路線限制。我在答案中給出的鏈接中提供了一個示例 –

相關問題