继承ApiController与IHttpController之间的区别

时间:2014-01-30 18:41:52

标签: c# asp.net asp.net-mvc asp.net-web-api

虽然我已经使用Microsoft .NET Framework多年了,但对于ASP.NET,尤其是ASP.NET WebAPI框架,我是一个新手。我正在考虑将ASP.NET WebAPI框架用于一个小项目。

我正在查看the ASP.NET WebAPI poster,并注意到Controller课程可以:

  1. ApiController类,
  2. 派生
  3. 实施IHttpController界面
  4. 阅读MSDN documentation for the ApiController class表明它实现了IHttpControllerIHttpController似乎只是声明了一个名为ExecuteAsync()的方法。

    我不清楚的是:您应该在什么情况下从ApiController派生,或者只是实施IHttpController界面的ExecuteAsync()方法?每种方法的优缺点是什么?

2 个答案:

答案 0 :(得分:5)

如果这与MVC中的基本控制器相同:最简单的方法是从基类(ApiController)派生。这为您和一些基本的请求处理提供了额外的抽象级别,这是您通常希望避免自己做的事情。

对于ASP.NET MVC,如果要自定义框架处理请求的方式,则可以创建自己的IController类。这包括操作方法,视图渲染等。

ASP.NET提供Controller(和ApiController)类作为所有这些事情的标准实现,并为您提供了预定义的处理请求的方法。

如果要自定义所有这些“低级”内容,请使用IHttpController;如果你没有特别需要改变任何东西,请使用ApiController

ControllerExecuteAsync()方法(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")
        };
    }
}