是否有应用于Web API ApiController方法的默认动词?

dji*_*kay 13 asp.net asp.net-web-api asp.net-web-api-routing

我一直在看这篇文章的代码(在https://github.com/patelsan/WebAPIAuthentication中):http://www.codeproject.com/Articles/630986/Cross-Platform-Authentication-With-ASP- NET-Web-API.

它非常好,似乎工作正常.很少有文章解释这种令牌认证,但这是我见过的最好的.请注意,我是这项技术的新手,还有很多需要学习的地方.

所以,我注意到UsersController有这样的代码:

public class UsersController : ApiController
{
    public Status Authenticate(User user)
    {
        . . .
    }
}
Run Code Online (Sandbox Code Playgroud)

Authenticate方法不是以已知的HTTP动词开头,例如Get或Post,并且没有与此方法关联的[HttpGet]或[HttpPost]属性,那么控制器如何知道哪个动词与此方法相关联?只需查看代码,我怎么知道我需要使用哪个动词?如果没有匹配的话,是否存在"默认"动词这样的事情?

顺便说一句,如果你想知道,唯一有效的动词是POST.我很想知道为什么会这样.

EBa*_*arr 23

在每天学习新东西的情况下提交此文件!

通常,方法名称匹配被认为是这种方式.但是,查看WebAPI源代码时,有一个回退逻辑分支.如果方法名称未映射(通过属性或约定)到支持的HTTP谓词,则默认为POST.

默认情况下,操作选择通过ReflectedHttpActionDescriptor类进行.这里重要的方法是GetSupportedHttpMethods().在相关部分中,代码为:

        if (supportedHttpMethods.Count == 0)
        {
            // Use POST as the default HttpMethod
            supportedHttpMethods.Add(HttpMethod.Post);
        }
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到完整的源代码(在文件的中间).


Toa*_*yen 13

在这种特殊情况下,默认的Http Verb是POST.在其他情况下,默认动词取决于操作的名称和其他因素.以下是asp.net引用的算法:

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

  1. 您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut.

  2. 否则,如果操作的名称(控制器方法)以"获取","发布","放置","删除","头部","选项"或"修补程序"开头,则按照惯例,操作支持该操作HTTP方法.

  3. 如果不是上述方法,则该方法支持POST.

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection