您好我正在开发webapi应用程序,我在一个控制器中有三个GET方法。我可以调用2种方法但第三种方法我无法调用。
以下是我可以致电的方法。
[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
我可以在这里得到一些帮助吗?任何帮助将不胜感激。
答案 0 :(得分:3)
可选路由参数为
string
[Route("user/{role?}")]
public HttpResponseMessage Get(string role)
{
return Request.CreateResponse(HttpStatusCode.OK, "Get me on role");
}
您不能将string
作为可选参数,因为 Web API 中不支持它作为可以为空的约束,有关详细信息,请参阅此内容{{1} 3}}
答案 1 :(得分: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