虽然我已经使用Microsoft .NET Framework多年了,但对于ASP.NET,尤其是ASP.NET WebAPI框架,我是一个新手。我正在考虑将ASP.NET WebAPI框架用于一个小项目。
我正在查看the ASP.NET WebAPI poster,并注意到Controller
课程可以:
ApiController
类,或 IHttpController
界面阅读MSDN documentation for the ApiController
class表明它实现了IHttpController
。 IHttpController
似乎只是声明了一个名为ExecuteAsync()
的方法。
我不清楚的是:您应该在什么情况下从ApiController
派生,或者只是实施IHttpController
界面的ExecuteAsync()
方法?每种方法的优缺点是什么?
答案 0 :(得分:5)
如果这与MVC中的基本控制器相同:最简单的方法是从基类(ApiController
)派生。这为您和一些基本的请求处理提供了额外的抽象级别,这是您通常希望避免自己做的事情。
对于ASP.NET MVC,如果要自定义框架处理请求的方式,则可以创建自己的IController
类。这包括操作方法,视图渲染等。
ASP.NET提供Controller
(和ApiController
)类作为所有这些事情的标准实现,并为您提供了预定义的处理请求的方法。
如果要自定义所有这些“低级”内容,请使用IHttpController
;如果你没有特别需要改变任何东西,请使用ApiController
。
Controller
其ExecuteAsync()
方法(MVC中的Execute
)将作为请求的最基本入口点。从该方法返回数据作为视图包括将字符串写入requestContext
响应;几乎不是一种非常舒适的工作方式。
它允许您定义自己的控制器并为您提供很大的适应空间,但这也意味着您将不得不重新发明大量的轮子。
答案 1 :(得分:4)
如果您使用IHttpController
,则没有操作选择,也没有操作过滤器。您只需获得HTTPRequestMessage
并返回HTTPResponseMessage
。
如果您的要求很简单,使用IHttpController实际上是一种非常简单的返回内容的方法。您仍然可以使用在常规ApiController操作中使用的所有常规HttpContent对象。
public class SimpleController : IHttpController
{
public async Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
{
return new HttpResponseMessage(HttpStatusCode.OK)
{
RequestMessage = controllerContext.Request,
Content = new StringContent("Hello World")
};
}
}