我正在使用ApiController.我很难理解为什么ApiControllers在某些方面与控制器不同.
采取
public class QuestionCommentController : ApiController
{
QuestionCommentCRUD crud = new QuestionCommentCRUD();
// GET api/questioncomment/5
[HttpGet]
public string Read(int id)
Run Code Online (Sandbox Code Playgroud)
我习惯于Controller允许我创建方法而不通过Attributes指定合法动词的类型:
public class QuestionCommentController : Controller
{
QuestionCommentCRUD crud = new QuestionCommentCRUD();
// GET questioncomment/5
public string Read(int id)
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,我可以在不指定的情况下执行GET/POST HttpGetAttribute.我发现这种行为令人困惑,原因如下:
HttpGet:System.Web.Http.HttpGet和System.Web.Mvc.HttpGetSystem.Web.Http.HttpGe需要T,System.Web.Mvc.HttpGet是不是需要GET请求ApiController 请求需要一条独特的路线 /api/controller...Controller让我陷入成功之中.较新的ApiController需要手持.
我注意到默认模板有一个我不理解的语法:
public void Post([FromBody]string value)
{
}
Run Code Online (Sandbox Code Playgroud)
动词是方法名称,还有一些时髦的[FromBody]东西.也许这就是为什么这样设置的原因?ApiController对于这种设计的使用存在哪些假设导致了这种设计?
如果遵循内置约定,则API控制器不需要对方法进行动词操作.如果您使用正确的动词,Get,Post等为您的方法名称添加前缀,则无需使用该属性进行装饰.
在你的情况下.
public string GetRead(int)
Run Code Online (Sandbox Code Playgroud)
以及我正在进行的项目中的实例
[Authorize]
public HttpResponseMessage GetStoreList([FromUri]NamedViewModel model)
Run Code Online (Sandbox Code Playgroud)
无需装饰,因此不需要System.Web.Http.HttpGet.
您可以按照上面列出的方式或我拥有的方式进行操作.WebApi允许您根据需要执行REST或RPC样式调用.这就是你看到差异的原因.包含对RESTful样式调用的支持需要额外的工作.
我同意两个单独的HttpGet属性令人困惑,特别是当它们都包含在开箱即用的WebApi项目中时.当我意外地包含错误的命名空间时,我咬了几下.
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |