Для возврата из контроллера Web API 2 я могу вернуть содержимое с ответом, если ответ в порядке (состояние 200), например так:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Если возможно, я хочу по возможности использовать встроенные типы результатов здесь: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Мой вопрос, для другого типа ответа (не 200), как я могу вернуть сообщение (строку) с ним? Например, я могу сделать это:
public IHttpActionResult Get()
{
return InternalServerError();
}
но не это
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
В идеале я хочу, чтобы это было обобщено, чтобы я мог отправить сообщение обратно с любой из реализаций IHttpActionResult.
Должен ли я сделать это (и создать свое собственное ответное сообщение):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
или есть лучший способ?
c#
asp.net-web-api
httpresponse
mayabelle
источник
источник
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxОтветы:
Вы можете использовать это:
источник
code
(где код является строкой) вreturn Content(HttpStatusCode.OK, code)
инкапсулируется в «что является неожиданным, есть ли какая-то причина для этого? Например, возвращаемое значение,"\"value\""
я использую mvc5Вы можете использовать HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
namespace), например так:Предпочтительно создавать ответы на основе запроса, чтобы воспользоваться преимуществами согласования содержимого Web API.
источник
ApiController.Request
ноль, это означает, что вы находитесь не в правильном контексте, или что-то не работает в вашей архитектуре WebAPI.В итоге я выбрал следующее решение:
... который можно использовать так:
Я открыт для предложений по улучшению. :)
источник
Вы также можете сделать:
источник
Любой, кто заинтересован в возвращении чего-либо с любым кодом состояния с возвратом ResponseMessage:
источник
В ASP.NET Web API 2 вы можете заключить любое
ResponseMessage
в ResponseMessageResult :В некоторых случаях это может быть самый простой способ получить желаемый результат, хотя обычно предпочтительнее использовать различные результаты в System.Web.Http.Results .
источник
Просто:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
Не забудьте сослаться на System.Net.Http и System.Net .
источник
Я бы порекомендовал прочитать этот пост. Существует множество способов использовать существующий HttpResponse, как это предлагается, но если вы хотите использовать преимущества Web Api 2, обратите внимание на использование некоторых встроенных параметров IHttpActionResult, таких как
или
Выберите правильный тип возврата для контроллеров Web Api
источник
Более подробный пример с поддержкой HTTP-кода, не определенного в C #
HttpStatusCode
.Content
это виртуальный метод, определенный в абстрактном классеApiController
, основа контроллера. Смотрите декларацию как ниже:источник
@mayabelle, вы можете создать бетон IHttpActionResult и обернуть этот код следующим образом:
источник
У меня такая же проблема. Я хочу создать собственный результат для моих контроллеров API, чтобы называть их как
return Ok("some text");
Затем я сделал это: 1) Создать пользовательский тип результата с помощью синглета
2) Создайте пользовательский контроллер с новым методом:
И тогда я могу вызвать их в моих контроллерах, например так:
источник
этот ответ основан на ответе Шамиля Якупова с реальным объектом вместо строки.
источник
За исключением, я обычно делаю
источник
Выше вещи действительно полезны.
При создании веб-сервисов, если вы воспользуетесь услугами, потребитель будет очень благодарен. Я пытался поддерживать единообразие вывода. Также вы можете дать замечание или актуальное сообщение об ошибке. Потребитель веб-службы может только проверить, имеет ли IsSuccess значение true или нет, иначе он будет уверен в наличии проблемы и будет действовать в соответствии с ситуацией.
Вы можете дать предложение, если таковые имеются :)
источник
Извините за поздний ответ, почему бы вам не использовать просто
return BadRequest("your message");
Я использую это для всех моих
IHttpActionResult
ошибок, это работает хорошовот документация: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
источник
400
ответ будет неуместным. ОП конкретно дал500
ответ в качестве примера.