Я хотел бы спросить, как перенаправить из обработчика исключений, например, в действие ErrorPage
из Error
контроллера с сообщением об исключении в качестве параметра этого метода?
Пока я пробовал это, но строкав методе контроллера нуль
app.UseExceptionHandler(
options =>
{
options.Run(
async httpcontext =>
{
httpcontext.Response.ContentType = "text/html";
var ex = httpcontext.Features.Get<IExceptionHandlerFeature>();
if (ex != null)
{
httpcontext.Items.Add.("error", ex.Error.Message);
httpcontext.Response.Redirect("/Error/ErrorPage/");
}
});
});
Протестировано с этим:
public IActionResult ErrorPage()
{
var err = HttpContext.Items.ContainsKey("error") ? HttpContext.Items["error"] : "Error";
// other logic
return View("ExceptionView", err);
}
и этот:
public IActionResult ErrorPage(string error)
{
// other logic
return View("ExceptionView", error);
}
Также пробовал таким образом:
app.UseExceptionHandler(
options =>
{
options.Run(
async httpcontext =>
{
httpcontext.Response.ContentType = "text/html";
var ex = httpcontext.Features.Get<IExceptionHandlerFeature>();
if (ex != null)
{
//httpcontext.Request.Path = "/Error/ErrorPage/";
//httpcontext.Request.QueryString = new QueryString($"?error={ex.Error.Message}");
await httpcontext.Response.WriteAsync(JsonConvert.SerializeObject(new
{
error = ex.Error.Message
}));
httpcontext.Response.Redirect("/Error/ErrorPage/");
}
});
});
С обоими: с и без [FromBody]
public IActionResult ErrorPage([FromBody] string error)
{
// other logic
return View("ExceptionView", error);
}
Весь контроллер
public class Error : ControllerBase
{
public Error(Context context)
{
_context = context;
}
public IActionResult ErrorPage([FromBody] string error)
{
return View("ExceptionView", error);
}
}