Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在一个控制器中调用三个get方法?_C#_Asp.net Web Api_Asp.net Mvc 5_Asp.net Web Api Routing - Fatal编程技术网

C# 如何在一个控制器中调用三个get方法?

C# 如何在一个控制器中调用三个get方法?,c#,asp.net-web-api,asp.net-mvc-5,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Mvc 5,Asp.net Web Api Routing,嗨,我正在开发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 H

嗨,我正在开发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
我可以在这里得到一些帮助吗?任何帮助都将不胜感激

可选路由参数为
string


您不能将
string
作为可选参数,因为Web API中不支持将其作为可为空的约束。有关详细信息,请参阅此部分,

使用带有路由约束的属性路由应有助于充分区分路由,以避免冲突

首先确保已启用属性路由

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

资料来源:

谢谢。是否有其他方法解决此问题?您可以编写自定义路由约束。。我在答案中给出的链接中提供了一个示例
[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");
    }
}