2016-12-28 2 views
1


Каково значение использования IHttpActionResult в качестве возвращаемого типа в вызове метода ASP.NET WebAPI.
Как это интерфейс, как мы можем вернуть результат в виде интерфейса?
может кто-то объяснить концепцию этого?

Спасибо заранее!return type in webAPI call

+0

Здесь есть хорошее искупление; http://stackoverflow.com/questions/21758615/why-should-i-use-ihttpactionresult-instead-of-httpresponsemessage Посмотрите на пост Behzad Бахманьяр в – Mehmet

+1

Это просто обновление предыдущего стандарта использования 'HttpResponseMessage' , хотя также нет ничего, что помешало бы вам еще просто вернуть сам объект. Такие типы, как 'HttpResponseMessage' и' IHttpActionResult', просто дают вам больше контроля над оберткой HTTP для ответа, вместо того, чтобы просто возвращать данные и исключать исключение. Думаю, для меня не совсем ясно, что именно вы спрашиваете. – David

+0

*** Ваш вопрос в основном [Почему интерфейсы полезны?] (Http://softwareengineering.stackexchange.com/questions/108240/why-are-interfaces-useful).*** – Win

ответ

1

На основе 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

привет

Я надеюсь, что это помогает. Удачи.

+0

Спасибо за это объяснение. это было полезно. еще одно сомнение у меня было. как тип возврата является интерфейсом. Я имею в виду, что я могу понять, что возвращает строку, объект любого класса, но как можно вернуть интерфейс? –

+0

@AmeyDeshpande вы возвращаете тип, основанный на правилах этого интерфейса, интерфейс содержит правила и на основе этих правил вы можете вернуть тип. в простом английском :) – Valkyrie

+0

Извините :(можете ли вы, пожалуйста, уточнить больше? Не получить то, что вы хотите сказать. –

 Смежные вопросы

  • Нет связанных вопросов^_^