2014-01-30 73 views
4

虽然我已经使用Microsoft .NET Framework多年,但对于ASP.NET,特别是ASP.NET WebAPI Framework,我是一个新手。我正在考虑对一个小型项目使用ASP.NET WebAPI框架。继承ApiController与IHttpController之间的区别

我有一个过目the ASP.NET WebAPI poster,并注意到一个Controller类可以:

  1. 派生从ApiController类,
  2. 落实IHttpController接口

阅读MSDN documentation for the ApiController class显示它实现了IHttpController。看起来IHttpController只是简单地声明一个叫做ExecuteAsync()的方法。

我不清楚的是:在什么情况下你应该从ApiController派生出来,或者干脆实现IHttpController接口的ExecuteAsync()方法?每种方法的优缺点是什么?

回答

4

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

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

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

如果您想定制所有这些“低级别”的东西,请使用IHttpController;如果您没有特别需要改变任何东西,请使用ApiController

A ControllerExecuteAsync()方法(在MVC中的Execute)将作为请求的非常基本的入口点。从该方法作为视图返回数据包括将字符串写入requestContext响应;几乎没有一种非常舒适的工作方式。

它允许您定义自己的控制器并为您提供非常大的适应空间,但这也意味着您将不得不重新创造一大堆车轮。

+0

很好的答案,谢谢。由于我不在乎此时深入研究低级实现,所以我可能会坚持从'ApiController'派生出来。 –

2

如果您使用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") 
     }; 
    } 
} 
相关问题