Para retornar de um controlador da API da Web 2, posso retornar o conteúdo com a resposta se a resposta estiver OK (status 200) assim:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Se possível, desejo usar os tipos de resultados internos aqui, quando possível: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Minha pergunta é, para outro tipo de resposta (não 200), como posso retornar uma mensagem (string) com ela? Por exemplo, eu posso fazer isso:
public IHttpActionResult Get()
{
return InternalServerError();
}
mas não isso:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Idealmente, quero que isso seja generalizado para que eu possa enviar uma mensagem de volta com qualquer uma das implementações de IHttpActionResult.
Preciso fazer isso (e criar minha própria mensagem de resposta):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
Ou há um modo melhor?
c#
asp.net-web-api
httpresponse
mayabelle
fonte
fonte
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxRespostas:
Você pode usar isto:
fonte
code
(onde o código é uma string) emreturn Content(HttpStatusCode.OK, code)
é encapsulado em "o que é inesperado, há alguma razão para este exemplo, o valor que é retornado é?"\"value\""
Eu estou usando mvc5Você pode usar HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
namespace), assim:É preferível criar respostas com base na solicitação para aproveitar a negociação de conteúdo da API da Web.
fonte
ApiController.Request
for nulo, significa que você não está no contexto certo ou algo está quebrado na arquitetura da WebAPI.Acabei indo com a seguinte solução:
... que pode ser usado assim:
Estou aberto a sugestões de melhorias. :)
fonte
Você também pode fazer:
fonte
Qualquer pessoa interessada em retornar qualquer coisa com qualquer código de status retornando o ResponseMessage:
fonte
Na API da Web do ASP.NET 2, você pode agrupar qualquer
ResponseMessage
em um ResponseMessageResult :Em alguns casos, essa pode ser a maneira mais simples de obter o resultado desejado, embora geralmente seja preferível usar os vários resultados em System.Web.Http.Results .
fonte
Simples:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
Lembre-se de referenciar System.Net.Http e System.Net .
fonte
Eu recomendaria ler este post. Existem várias maneiras de usar o HttpResponse existente, conforme sugerido, mas se você quiser tirar proveito do Web Api 2, consulte o uso de algumas das opções IHttpActionResult internas, como
ou
Escolha o tipo de retorno correto para os controladores de API da Web
fonte
Um exemplo mais detalhado com suporte ao código HTTP não definido em C #
HttpStatusCode
.Content
é um método virtual definido na classe abstrataApiController
, a base do controlador. Veja a declaração abaixo:fonte
@ mayabelle, você pode criar o IHttpActionResult concreto e agrupar esses códigos assim:
fonte
Eu tive o mesmo problema. Eu quero criar um resultado personalizado para meus controladores de API, para chamá-los como
return Ok("some text");
Então eu fiz isso: 1) Crie um tipo de resultado personalizado com singletone
2) Crie um controlador personalizado com o novo método:
E então eu posso chamá-los nos meus controladores, assim:
fonte
esta resposta é baseada na resposta de Shamil Yakupov, com objeto real em vez de string.
fonte
Para exceções, eu costumo fazer
fonte
As coisas acima são realmente úteis.
Ao criar serviços da web, se você considerar os serviços, o consumidor será muito apreciado. Eu tentei manter a uniformidade da saída. Além disso, você pode enviar comentários ou mensagens de erro reais. O consumidor de serviço da web pode apenas verificar se o IsSuccess é verdadeiro ou não, se não há certeza de que há algum problema e agir de acordo com a situação.
Você pode sugerir, se houver :)
fonte
Desculpe pela resposta tardia, por que você não usa simplesmente
return BadRequest("your message");
Eu o uso para todos os meus
IHttpActionResult
erros, está funcionando bemaqui está a documentação: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
fonte
400
resposta seria inadequada. O OP deu uma500
resposta específica como exemplo.