Каково значение использования IHttpActionResult
в качестве возвращаемого типа в вызове метода ASP.NET WebAPI.
Как это интерфейс, как мы можем вернуть результат в виде интерфейса?
может кто-то объяснить концепцию этого?
Спасибо заранее!return type in webAPI call
ответ
На основе Microsoft ASP.NET документации,
Интерфейс IHttpActionResult
был Введен в Web API 2. По существу, он определяет HttpResponseMessage завод. Вот некоторые преимущества использования интерфейса IHttpActionResult:
- Упрощает модульное тестирование ваших контроллеров.
- Перемещает общую логику для создания ответов HTTP на отдельные классы.
- Делает намерение действия контроллера более ясным, скрывая низкоуровневые детали построения ответа.
IHttpActionResult содержит один метод ExecuteAsync, который асинхронно создает экземпляр HttpResponseMessage.
public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}
Если действие контроллер возвращает IHttpActionResult, Web API вызывает метод ExecuteAsync для создания HttpResponseMessage. Затем он преобразует HttpResponseMessage в сообщение ответа HTTP.
Вот простой implementaton из IHttpActionResult, что создает простой текстовый ответ:
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);
}
}
Другой образец в контроллере:
public class ValuesController : ApiController
{
public IHttpActionResult Get()
{
return new TextResult("hello", Request);
}
}
И Его Respond
:
HTTP/1.1 200 OK Content-Length: 5 Content-Type: text/plain; кодировка = UTF-8 Сервер: Microsoft-IIS/8.0 Дата: Пн, 27 января 2014 8:53:35 GMT
привет
Я надеюсь, что это помогает. Удачи.
Спасибо за это объяснение. это было полезно. еще одно сомнение у меня было. как тип возврата является интерфейсом. Я имею в виду, что я могу понять, что возвращает строку, объект любого класса, но как можно вернуть интерфейс? –
@AmeyDeshpande вы возвращаете тип, основанный на правилах этого интерфейса, интерфейс содержит правила и на основе этих правил вы можете вернуть тип. в простом английском :) – Valkyrie
Извините :(можете ли вы, пожалуйста, уточнить больше? Не получить то, что вы хотите сказать. –
- 1. sizeof return type in C
- 2. Enforce Return Type in Function
- 3. read() return type in Python
- 4. bool type return rule in dapper
- 5. multi return type in C# методы
- 6. Nullable return type in oracle function
- 7. return utf8 json type in Python
- 8. return type of void * in C++
- 9. return type of classmethod
- 10. AJAX call return undefined
- 11. JSON call return 'undefined'
- 12. Ajax call return undefined
- 13. WebAPI Url.Link() return NULL
- 14. Webapi call from jquery failing
- 15. JQuery Ajax Call Return
- 16. Асинхронные блокировочные блоки webapi call
- 17. ASP.Net WebAPI Return CSS
- 18. Boost.Bind return type
- 19. Const символ * Return Type
- 20. Trailing Return Type on operator * In Template Class
- 21. Hacell monad return type
- 22. JQuery Call to Asp.Net WebApi
- 23. Java метод call return
- 24. Java: Call/Return Ошибка
- 25. call system() return 256
- 26. Spliterator trySplit return type
- 27. Java generics return type
- 28. Java beans-return type
- 29. integers array return type
- 30. C# Return Type Issue
Здесь есть хорошее искупление; http://stackoverflow.com/questions/21758615/why-should-i-use-ihttpactionresult-instead-of-httpresponsemessage Посмотрите на пост Behzad Бахманьяр в – Mehmet
Это просто обновление предыдущего стандарта использования 'HttpResponseMessage' , хотя также нет ничего, что помешало бы вам еще просто вернуть сам объект. Такие типы, как 'HttpResponseMessage' и' IHttpActionResult', просто дают вам больше контроля над оберткой HTTP для ответа, вместо того, чтобы просто возвращать данные и исключать исключение. Думаю, для меня не совсем ясно, что именно вы спрашиваете. – David
*** Ваш вопрос в основном [Почему интерфейсы полезны?] (Http://softwareengineering.stackexchange.com/questions/108240/why-are-interfaces-useful).*** – Win