在ASP.NET WebAPI方法调用中,使用IHttpActionResult
作为返回类型有什么意义。
由于这是一个接口,我们如何以界面的形式返回结果?
有人可以解释这背后的概念吗?
在此先感谢!webAPI调用中的返回类型
回答
基于该Microsoft ASP.NET文档,
的IHttpActionResult
接口在网络API 2.引种本质上,它定义了一个HttpResponseMessage工厂。下面是使用IHttpActionResult接口的一些优点:
- 简化单元测试您的控制器。
- 将用于创建HTTP响应的通用逻辑移动到单独的类中。
- 通过隐藏 构建响应的底层细节,使控制器操作的意图更加清晰。
IHttpActionResult包含一个方法ExecuteAsync,它异步地创建一个HttpResponseMessage实例。
public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}
如果一个控制器动作返回IHttpActionResult,网页API调用ExecuteAsync方法来创建一个HttpResponseMessage。然后它将HttpResponseMessage转换为HTTP响应消息。
这里是IHttpActionResult的简单implementaton创建一个纯文本响应:
public class ValuesController : ApiController
{
public IHttpActionResult Get()
{
return new TextResult("hello", Request);
}
}
及其Respond
:
HTTP/1.1
public class TextResult : IHttpActionResult { string _value; HttpRequestMessage _request; public TextResult(string value, HttpRequestMessage request) { _value = value; _request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var response = new HttpResponseMessage() { Content = new StringContent(_value), RequestMessage = _request }; return Task.FromResult(response); } }
在控制器中的另一个示例200 OK Content-Length:5 Content-Type:text/plain; 的charset = UTF-8服务器:Microsoft-IIS/8.0日期:星期一,2014年1月27日 8时53分35秒GMT
你好
我希望这有助于。祝你好运。
感谢您的解释。这很有帮助。我还有一个疑问。如何返回类型是接口。我的意思是我可以理解返回任何类的字符串,对象,但如何返回接口? –
@AmeyDeshpande你根据这个接口的规则返回一个类型,一个接口包含规则并且基于这些规则你可以返回一个类型。简单的英语:) – Valkyrie
对不起:(你能详细说明吗?没有得到你想说的。 –
- 1. 的WebAPI返回类型
- 2. 用Java以外的返回类型调用一个非空的返回类型
- 3. 返回类型的回调函数
- 4. WebAPI返回XML
- 5. 可以使用内容协商来控制ASP.NET WebApi中的返回类型吗?
- 6. Java - 返回类型的通用类型
- 7. asp.net webapi控制器,返回类型实体或HttpResponseMessage
- 8. 返回类型
- 9. 返回类型
- 10. 返回JPEG图像的WebAPI
- 11. 泛型类的返回类
- 12. 模板参数类返回的函数调用类型
- 13. JMock通用返回类型
- 14. 通用返回从类型
- 15. Java返回类型通用
- 16. java中的通用返回类型返回对象
- 17. 返回Java中的嵌套类类型
- 18. 覆盖子类中的返回类型
- 19. Webapi返回字符串XML中的JSON
- 20. 推导其参数的返回类型函数返回类型
- 21. webapi 2控制器get方法请求从Angular返回一个泛型类型?
- 22. 未指定类型的返回类型
- 23. 与强类型的返回类型
- 24. Tuple.Create返回类型
- 25. Back_insert_iterator返回类型
- 26. WCF返回类型
- 27. WCF返回类型
- 28. Mapstruct返回类型
- 29. JNI返回类型
- 30. typeOf返回类型
这里有一个很好的expilanation; http://stackoverflow.com/questions/21758615/why-should-i-use-ihttpactionresult-instead-of-httpresponsemessage 查找Behzad Bahmanyar的职位 – Mehmet
这只是一个更新到以前的标准使用'HttpResponseMessage'尽管也没有任何东西阻止你继续返回一个对象本身。像“HttpResponseMessage”和“IHttpActionResult”这样的类型只是简单地给了你对HTTP响应包装器的更多控制权,而不仅仅是返回数据和抛出异常。我想这对我而言并不是很清楚,具体是你在问什么。 – David
***你的问题基本上是[为什么接口有用?](http://softwareengineering.stackexchange.com/questions/108240/why-are-interfaces-useful)。*** – Win