为什么POST请求映射到此Web API操作方法
本文关键字:Web API 操作方法 POST 请求 映射 为什么 | 更新日期: 2023-09-27 18:25:35
我一直在下面的教程中学习如何使用OAuth在Web API中进行身份验证。
我以前在Web API上工作过,在那里我命名了从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();
}
正如注释所示,此方法响应POST请求。我看不出Web API如何知道此操作是用于POST的。有人能启发我吗?
如果您查看Web API路由和操作选择的文档:
HTTP方法。框架只选择与请求的HTTP方法匹配的操作,确定如下:
- 您可以指定具有属性的HTTP方法:AcceptVerbs、HttpDelete,HttpGet
- 否则,如果控制器方法的名称以"Get"、"Post"、"Put"、"Delete"、"Head"、"Options"或"Patch"开头,则按照惯例,该操作支持该HTTP方法
- 如果以上都不存在,则该方法支持POST
ReflectedHttpActionDescriptor.cs
的来源(行号294-300):
...
if (supportedHttpMethods.Count == 0)
{
// Use POST as the default HttpMethod
supportedHttpMethods.Add(HttpMethod.Post);
}
return supportedHttpMethods;
...
你会找到答案:
POST
是Web API中操作方法的默认HTTP Verb
此外,如果你在SO上搜索更多,你会发现以下问题:
是否有默认谓词应用于Web API ApiController方法?
虽然这是一个不同的问题,但问题与你的基本相同。