Web API 2 中的方法名称约定
本文关键字:约定 方法 API Web | 更新日期: 2023-09-27 18:34:15
是否有Web API 2中使用的约定的列表?
以这两种方法为例。两者都是作品,都没有用属性装饰。
IHttpActionResult GetMyModel(int id)
IEnumerable<MyModel> GetAllMyModels()
Get
响应路由"{控制器}/{操作}/{id}",所以我假设GetAllMyModels
因为它的返回类型而工作?还是GetAll
前缀?
还有其他约定吗?
在相关的说明中,为什么GetAllMyModels
返回一个枚举对象,而GetMyModel
返回IHttpActionResult
中的MyModel
?我应该从GetAllMyModels
回来IHttpActionResult
吗?
如果方法的名称以定义的 HTTP 方法开头,则在没有特定属性定义的情况下,该方法将映射到该方法。
private static Collection<HttpMethod> GetSupportedHttpMethods()
在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")
};
<截图 />
// 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;
}
}
请注意,如果未定义任何其他方法,则 POST 是默认的 HTTP 方法。
您可以通过浏览 Web API 2 源代码来了解发生了什么。
因此,要扩展它似乎只是返回某种元素集合的约定。您可以愉快地返回单个元素,它只是映射参数,在本例中为 0。
对于GetAllMyModels案例,我尝试了各种替代方案,它解决了以下问题。
GetAllMyModels - Yes
GetMyModels - Yes
我的型号 - No
获取马匹 - 是
因此,答案似乎是,如果签名以 Get 开头,并且具有返回 IEnumerable* 的签名,并且 EntityType 与其他控制器方法上使用的类型匹配,并且它没有参数,则将其用作返回所有实体的方法。
*我的边例,返回类型是可枚举的而不是 IHttpActionResult 是速记。它等效于 IHttpActionResult 的返回类型并返回 Ok(值)。