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方法匹配的操作,确定如下:
您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut.
否则,如果操作的名称(控制器方法)以"获取","发布","放置","删除","头部","选项"或"修补程序"开头,则按照惯例,操作支持该操作HTTP方法.
如果不是上述方法,则该方法支持POST.
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection
| 归档时间: |
|
| 查看次数: |
7091 次 |
| 最近记录: |