Web API 2中的方法名称约定

Ian*_*Ian 1 c# asp.net-web-api2

是否有Web API 2中使用的约定列表?

以这两种方法为例.两者都有效,都没有装饰属性.

IHttpActionResult GetMyModel(int id)

IEnumerable<MyModel> GetAllMyModels()
Run Code Online (Sandbox Code Playgroud)

Get响应路由"{controller}/{action}/{id}",所以我认为GetAllMyModels因为它的返回类型而起作用?还是GetAll前缀?

还有其他惯例吗?

与此相关的,为什么会GetAllMyModels返回一个枚举,而GetMyModel返回MyModelIHttpActionResult?如果我回来IHttpActionResultGetAllMyModels

谢谢

Bog*_*gin 5

如果方法的名称以定义的HTTP方法开头,则在没有特定属性定义的情况下,它将映射到该方法.

private static Collection<HttpMethod> GetSupportedHttpMethods()
Run Code Online (Sandbox Code Playgroud)

System.Web.Http.Controllers.ReflectedHttpActionDescriptor使用中_supportedHttpMethodsByConvention

private static readonly HttpMethod[] _supportedHttpMethodsByConvention = 
{ 
    HttpMethod.Get, 
    HttpMethod.Post, 
    HttpMethod.Put, 
    HttpMethod.Delete, 
    HttpMethod.Head, 
    HttpMethod.Options, 
    new HttpMethod("PATCH") 
};
Run Code Online (Sandbox Code Playgroud)

<剪断/>

// Get HttpMethod from method name convention 
for (int i = 0; i < _supportedHttpMethodsByConvention.Length; i++)
{
    if (methodInfo.Name.StartsWith(
        _supportedHttpMethodsByConvention[i].Method, 
        StringComparison.OrdinalIgnoreCase))
    {
        supportedHttpMethods.Add(_supportedHttpMethodsByConvention[i]);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果没有定义其他内容,POST是默认的HTTP方法.

您可以通过浏览Web API 2源代码来了解正在发生的事情.