C# 请求的资源不支持HTTP方法GET

C# 请求的资源不支持HTTP方法GET,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,当我运行此url时:/api/users/1它仅在我使用HttpDelete属性时映射到删除操作。这种行为的原因是什么 否则我会收到他的消息:请求的资源不支持HTTP方法get [RoutePrefix("api/users")] public class UserController : ApiController { private readonly IUserService _userService; public UserController(IUserService u

当我运行此url时:
/api/users/1
它仅在我使用HttpDelete属性时映射到删除操作。这种行为的原因是什么

否则我会收到他的消息:请求的资源不支持HTTP方法get

[RoutePrefix("api/users")]
public class UserController : ApiController
{
    private readonly IUserService _userService;
    public UserController(IUserService userService)
    {
        _userService = userService;
    }

    [Route("")]
    public HttpResponseMessage Get()
    {
        return Request.CreateResponse<IEnumerable<UserDTO>>(HttpStatusCode.OK, _userService.GetUsers());
    } 

    [Route("{id:int}")]
    [HttpDelete]
    public HttpResponseMessage Delete(int id)
    {
        _userService.Delete(id);
        return Request.CreateResponse(HttpStatusCode.OK, "User was deleted successfully");
    }
}

按照约定,HTTP谓词将与以该HTTP谓词为前缀的操作名称相匹配

因此,它抱怨您没有HTTP GET的操作,HTTP GET是您使用浏览器发出简单请求时使用的动词。您需要一个名为以下内容的操作:

public HttpResponseMessage Get(int id)
甚至

public HttpResponseMessage GetUser(int id)
显然,如果您使用DELETE发出请求,它将映射到您定义的DELETE操作

参考:


要查找操作,Web API会查看HTTP方法,然后查找名称以该HTTP方法名称开头的操作。例如,对于GET请求,Web API会查找以“GET…”开头的操作,例如“GetContact”或“GetAllContacts”。此约定仅适用于GET、POST、PUT和DELETE方法。您可以使用控制器上的属性启用其他HTTP方法。我们稍后会看到一个例子。”

您会看到“为了简洁而删除”的注释,其中有我的公共HttpResponseMessage Get(),因此这不是您提到的原因。我已用完整代码更新了我的问题(Get方法)但是您缺少接受参数的GET操作。根据URL/api/users/1,您希望将1作为参数传入,但没有接受参数的GET操作。路由正在寻找类似于
public HttpResponseMessage GET(int id)的操作
当我将fiddler与api/users/1一起使用并将http谓词设置为DELETE时,它会工作。但当我在浏览器url中触发api/users/1时,它会触发Get(int-id)(如您所说)。这是否意味着浏览器中触发的每个url默认都是Get请求?然后您的语句:“按惯例,HTTP谓词将与以该HTTP谓词为前缀的操作名称相匹配。“在浏览器url中触发是有意义的,我需要一个技术上可见的Get(int id),或者在我的情况下,我必须将我的删除属性设置为HttpDelete:-)谢谢!
public HttpResponseMessage GetUser(int id)