C# 为什么POST请求映射到此Web API操作方法?

C# 为什么POST请求映射到此Web API操作方法?,c#,asp.net,.net,asp.net-web-api,C#,Asp.net,.net,Asp.net Web Api,我一直在跟随一个教程,以了解OAuth在Web API中的身份验证 我以前曾在WebAPI上工作过,在那里我命名了以Get、Put、Post等开头的方法,以便根据http动词将它们路由到。我还知道动作可以用属性([HttpGet]等)修饰,以表示映射到它们的动词 在本教程中,控制器上有一个操作如下所示: // POST api/Account/Register [AllowAnonymous] [Route("Register")] public async Task<IHttpActio

我一直在跟随一个教程,以了解OAuth在Web API中的身份验证

我以前曾在WebAPI上工作过,在那里我命名了以Get、Put、Post等开头的方法,以便根据http动词将它们路由到。我还知道动作可以用属性([HttpGet]等)修饰,以表示映射到它们的动词

在本教程中,控制器上有一个操作如下所示:

// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(UserModel userModel)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);

     IdentityResult result = await _repo.RegisterUser(userModel);

     IHttpActionResult errorResult = GetErrorResult(result);

     if(errorResult != null)
        return errorResult;

     return Ok();
}
//发布api/帐户/注册
[异名]
[路线(“登记”)]
公共异步任务寄存器(UserModel UserModel)
{
如果(!ModelState.IsValid)
返回请求(ModelState);
IdentityResult result=wait _repo.RegisterUser(userModel);
IHttpActionResult errorResult=GetErrorResult(结果);
if(errorResult!=null)
返回错误结果;
返回Ok();
}

正如评论所暗示的,这种方法是对POST请求的响应。我看不出Web API如何知道此操作是用于POST的。有人能告诉我吗?

如果您查看Web API的文档:

HTTP方法。框架仅选择与请求的HTTP方法匹配的操作,确定如下:

  • 您可以使用属性指定HTTP方法:AcceptVerbsHttpDeleteHttpGetHttpHeadHttpOptionsHttpPatchHttpPostHttpPut
  • 否则,如果控制器方法的名称以“Get”、“Post”、“Put”、“Delete”、“Head”、“Options”或“Patch”开头,则按照惯例,该操作支持该HTTP方法
  • 如果以上都没有,则该方法支持POST。
  • 和的来源(行号294-300):

    你会找到你的答案:

    POST
    是Web API中操作方法的默认
    HTTP谓词


    另外,如果您再搜索一下,您会发现以下问题:


    虽然这是一个不同的问题,但问题与您的基本相同。

    如果您查看Web API的文档:

    HTTP方法。框架仅选择与请求的HTTP方法匹配的操作,确定如下:

  • 您可以使用属性指定HTTP方法:AcceptVerbsHttpDeleteHttpGetHttpHeadHttpOptionsHttpPatchHttpPostHttpPut
  • 否则,如果控制器方法的名称以“Get”、“Post”、“Put”、“Delete”、“Head”、“Options”或“Patch”开头,则按照惯例,该操作支持该HTTP方法
  • 如果以上都没有,则该方法支持POST。
  • 和的来源(行号294-300):

    你会找到你的答案:

    POST
    是Web API中操作方法的默认
    HTTP谓词


    另外,如果您再搜索一下,您会发现以下问题:

    虽然这是一个不同的问题,但问题基本上和你的一样

    ...
    if (supportedHttpMethods.Count == 0)
    {
        // Use POST as the default HttpMethod
        supportedHttpMethods.Add(HttpMethod.Post);
    }
    
    return supportedHttpMethods;
    ...