2016-04-07 3 views
0

Если у меня есть метод веб-API async, то объект Request имеет значение null (в качестве id в других сообщениях, таких как this one).Как отформатировать ответ в методе async WebAPI?

кажется, что наиболее распространенным средством возвращения ответа в этом обстоятельстве использовать что-то вроде

return new HttpResponseMessage(HttpStatusCode.OK) { 
    Content = new ObjectContent<T>(myObj, new JsonMediaTypeFormatter()) 
}; 

Но whatabout форматирование? Обычно объект Request обрабатывает это, потому что он знает, что было запрошено, но если у меня нет объекта Request, то как узнать запрошенный формат? Webapi

ответ

2

Все мои методы веб-API асинхронны, и я никогда не было проблем с возвратом данных. Это то, что типичный метод контроллера выглядит в одном из моих проектов:

[HttpGet] 
[Route("v1/samples/{id}", Name="SampleGet")] 
[ResponseType(typeof(string))] 
public async Task<IHttpActionResult> Get(int id) 
{ 
    return Ok("value"); 
} 

Как я уже говорил, я никогда не имел проблем делать это так, и все мои текущие проекты по этой общей схеме.

Единичное тестирование ответа выглядит следующим образом. Для тестирования для OK ответа с использованием NUnit и FluentAssertions:

[Test] 
public async Task GetReturns200IfSuccessful() 
{ 
    //Arrange 

    //Act 
    var response = await _sut.GetAsync(); 

    //Assert 
    response.Should().BeOfType<OkNegotiatedContentResult<string>(); 
} 

Если вы хотите, чтобы проверить значение ответа, вы делаете это:

[Test] 
public async Task GetReturnsValue() 
{ 
    //Act 
    var response = await _sut.GetAsync(); 
    var result = response as OkNegotiatedContentResult<AssetList>; 

    //Assert 
    result.Should().Be("value"); 
} 

Надежда, что помогает.

+0

Это кажется многообещающим, но как вы можете протестировать модуль, например, возвращенный код состояния? 'response.ExecuteAsync (CancellationToken.None) .Result.StatusCode' выбрасывает исключение с нулевой ссылкой. – awj

+0

Я добавил несколько примеров тестирования модулей – MichaelDotKnox

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