De volta ao RC1, eu faria o seguinte:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
No RC2, não há mais HttpStatusCodeResult e não há nada que eu possa encontrar que me permita retornar um tipo 500 de IActionResult.
A abordagem agora é completamente diferente para o que estou perguntando? Não tentamos mais pegar o Controller
código? Nós apenas deixamos a estrutura lançar uma exceção genérica de 500 de volta ao chamador da API? Para desenvolvimento, como posso ver a pilha de exceção exata?
c#
asp.net-core
asp.net-core-mvc
Mickael Caruso
fonte
fonte
Você pode usar
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
eMicrosoft.AspNetCore.Http.StatusCodes
formar sua resposta, se não desejar codificar números específicos.ATUALIZAÇÃO: ago 2019
Talvez não esteja diretamente relacionado à pergunta original, mas ao tentar obter o mesmo resultado
Microsoft Azure Functions
, descobri que precisava construir um novoStatusCodeResult
objeto encontrado naMicrosoft.AspNetCore.Mvc.Core
montagem. Meu código agora se parece com isso;fonte
Se você precisar de um corpo em sua resposta, ligue para
Isso retornará 500 com o objeto de resposta ...
fonte
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });
E, é claro, você pode adicionar uma mensagem descritiva como desejar e outros elementos também.Uma maneira melhor de lidar com isso a partir de agora (1.1) é fazer isso em
Startup.cs
'sConfigure()
:Isso executará a rota para
/Error
. Isso evitará a adição de blocos try-catch a cada ação que você escrever.Obviamente, você precisará adicionar um ErrorController semelhante a este:
Mais informações aqui .
Caso deseje obter os dados reais da exceção, você pode adicioná-los ao acima,
Get()
antes dareturn
instrução.Trecho acima retirado do blog de Scott Sauber .
fonte
ExceptionHandler
middleware aqui. Você pode, é claro, fazer o seu próprio ou estendê-lo como achar melhor. Aqui está o link para as fontes . EDIT: Veja esta linha paraIExceptionHandlerPathFeature
.Deve ser usado em contextos não-ASP.NET (consulte outras respostas para o ASP.NET Core).
HttpStatusCode
é uma enumeração emSystem.Net
.fonte
Que tal criar uma classe ObjectResult personalizada que represente um Erro Interno do Servidor como esse
OkObjectResult
? Você pode colocar um método simples em sua própria classe base para poder gerar facilmente o InternalServerError e retorná-lo da mesma forma que vocêOk()
ouBadRequest()
.fonte
Quando você deseja retornar uma resposta JSON no MVC .Net Core Você também pode usar:
Isso retornará o resultado JSON e HTTPStatus. Eu o uso para retornar resultados para jQuery.ajax ().
fonte
return new JsonResult ...
mas funcionou muito bem.Para aspnetcore-3.1, você também pode usar
Problem()
como abaixo;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
fonte