C# Web API 2中的方法名称约定
是否有Web API 2中使用的约定列表 以这两种方法为例。两者都可以工作,但都没有用属性装饰C# Web API 2中的方法名称约定,c#,asp.net-web-api2,C#,Asp.net Web Api2,是否有Web API 2中使用的约定列表 以这两种方法为例。两者都可以工作,但都没有用属性装饰 IHttpActionResult GetMyModel(int id) IEnumerable<MyModel> GetAllMyModels() IHttpActionResult GetMyModel(int-id) IEnumerable GetAllMyModels() Get响应路由“{controller}/{action}/{id}”,因此我假设GetAllMyMod
IHttpActionResult GetMyModel(int id)
IEnumerable<MyModel> GetAllMyModels()
IHttpActionResult GetMyModel(int-id)
IEnumerable GetAllMyModels()
Get
响应路由“{controller}/{action}/{id}”,因此我假设GetAllMyModels
工作是因为它的返回类型?还是GetAll
前缀
还有其他的惯例吗
另一方面,为什么GetAllMyModels
返回可枚举项,而GetMyModel
在IHttpActionResult
中返回MyModel
?我是否应该从GetAllMyModels
返回IHttpActionResult
谢谢所以扩展它似乎只是返回某种元素集合的惯例。您可以愉快地返回单个元素,它只映射参数,在本例中为0 对于GetAllMyModels案例,我尝试了各种备选方案,它解决了以下问题 GetAllMyModels-是 GetMyModels-是 MyModels-否 是的 因此,答案似乎是,如果签名以Get开头,并且有一个返回IEnumerable*的签名,EntityType与其他控制器方法上使用的类型匹配,并且没有参数,那么它将用作返回所有实体的方法
*我的附带案例是,返回类型是可枚举的,而不是IHttpActionResult,这是一种速记。它相当于IHttpActionResult的返回类型,并返回Ok(值) 因此,扩展它似乎只是返回某种元素集合的约定。您可以愉快地返回单个元素,它只映射参数,在本例中为0 对于GetAllMyModels案例,我尝试了各种备选方案,它解决了以下问题 GetAllMyModels-是 GetMyModels-是 MyModels-否 是的 因此,答案似乎是,如果签名以Get开头,并且有一个返回IEnumerable*的签名,EntityType与其他控制器方法上使用的类型匹配,并且没有参数,那么它将用作返回所有实体的方法
*我的附带案例是,返回类型是可枚举的,而不是IHttpActionResult,这是一种速记。它相当于IHttpActionResult的返回类型,并返回Ok(值) 如果方法的名称以定义的HTTP方法开头,则在没有特定属性定义的情况下,它将映射到该方法
private static Collection<HttpMethod> GetSupportedHttpMethods()
//从方法名约定获取HttpMethod
对于(int i=0;i<_支持的httpmethodsbyconvention.Length;i++)
{
如果(methodInfo.Name.StartsWith)(
_supportedHttpMethodsByConvention[i]。方法,
StringComparison.Ordinalingorecase)
{
添加(_supportedHttpMethodsByConvention[i]);
打破
}
}
请注意,如果没有定义其他内容,则POST是默认的HTTP方法
您可以通过浏览来了解情况。如果方法的名称以定义的HTTP方法开头,则在没有特定属性定义的情况下,它将映射到该方法
private static Collection<HttpMethod> GetSupportedHttpMethods()
//从方法名约定获取HttpMethod
对于(int i=0;i<_支持的httpmethodsbyconvention.Length;i++)
{
如果(methodInfo.Name.StartsWith)(
_supportedHttpMethodsByConvention[i]。方法,
StringComparison.Ordinalingorecase)
{
添加(_supportedHttpMethodsByConvention[i]);
打破
}
}
请注意,如果没有定义其他内容,则POST是默认的HTTP方法
您可以通过浏览来了解发生了什么。我真的怀疑这在互联网上还没有很好的记录。到目前为止,您发现了什么?如果该方法的名称以
Get
开头,那么Get
HTTP动词将使用它-根据需要传递给该方法的参数,它将选择最合适的一个,特别是在GetAll约定上。我很欣赏使用Get-here,但显然GetAll不是HTTP动词,所以我假设它在签名或方法名上匹配。Jim,我确信它在上千页上都有详细的描述,Google没有向我提供过任何一页。与其发表尖刻的评论,不如贡献一篇。我真的怀疑这在互联网上还没有很好的记录。到目前为止,您发现了什么?如果该方法的名称以Get
开头,那么Get
HTTP动词将使用它-根据需要传递给该方法的参数,它将选择最合适的一个,特别是在GetAll约定上。我很欣赏使用Get-here,但显然GetAll不是HTTP动词,所以我假设它在签名或方法名上匹配。Jim,我确信它在上千页上都有详细的描述,Google没有向我提供过任何一页。不如贡献其中一个,而不是发表尖刻的评论。谢谢,实际上我没有想到要查看代码。但我不确定我是否想从中寻找答案。我理解动词的关联,我一直在学习微软的一些教程,他们使用“约定”来获取所有元素,这些元素假设了很多。我只是想扩展我的答案以供参考,但我会接受你的答案。谢谢,实际上我没有想到要查看代码。但我不确定我是否想从中寻找答案。我理解动词的关联,我一直在学习微软的一些教程,他们使用“约定”来获取所有元素,这些元素假设了很多。我只是想扩大我的答案以供参考,但我接受你的答案。
// 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;
}
}