Я хочу получить исходный путь (введенный пользователем) в контроллере ошибок после перенаправления на страницу ошибки 404?!
public class ErrorViewModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
public string RequestedUrl { get; set; }
public string RedirectUrl { get; set; }
public string ExceptionMessage { get; set; }
}
и в контроллере ошибок
return View("ErrorPage", new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier,
RequestedUrl = "", RedirectUrl = HttpContext.Request.GetDisplayUrl(), ExceptionMessage = ReasonPhrases.GetReasonPhrase(statusCode) });
Обновлено:
Вы также можете обратиться к методу ниже.
Запуск.cs:
app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode = {0}");
ErrorViewModel.cs:
public class ErrorViewModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
public string RequestedUrl { get; set; }
public string RedirectUrl { get; set; }
public string ExceptionMessage { get; set; }
}
HomeController.cs:
public IActionResult Error()
{
var statusCode = HttpContext.Response.StatusCode;
ViewData["statusCode"] = statusCode;
var feauter = Request.HttpContext.Features.Get<IStatusCodeReExecuteFeature>();//=null
var path = feauter?.OriginalPath;
return View("ErrorPage", new ErrorViewModel
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier,
RequestedUrl = path,
RedirectUrl = HttpContext.Request.GetDisplayUrl(),
ExceptionMessage = ReasonPhrases.GetReasonPhrase(statusCode)
});
}
ErrorPage.cshtml:
@model ErrorViewModel
@{
ViewData["Title"] = "ErrorPage";
}
<h1 class = "text-danger">@ViewData["statusCode"]</h1>
<h2 class = "text-danger">An error occurred while processing your request.</h2>
<div>RequestId :@Model.RequestId</div>
<div>ShowRequestId :@Model.ShowRequestId</div>
<div>RequestedUrl :@Model.RequestedUrl</div>
<div>RedirectUrl :@Model.RedirectUrl</div>
<div>ExceptionMessage:@Model.ExceptionMessage</div>
Результат испытаний:
ПРЕДЫДУЩИЙ:
Если вы хотите получить URL-адрес запроса и URL-адрес перенаправления, я предлагаю вам использовать метод RedirectToAction
.
Пожалуйста, проверьте страницу ниже, если вы хотите, пожалуйста, дайте мне знать.
И в моем тестовом коде я также использую промежуточное ПО для обработки события 302.