Перенаправление на действие в filterContext Результат не работает ASP. NET MVC - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь перенаправить на Controller в моем методе OnException, но страница возвращает пустое представление, и ссылка не переходит на страницу, на которую я перенаправил. Пожалуйста, сообщите.

Это код:

protected override void OnException(ExceptionContext filterContext)
{
  if (filterContext.ExceptionHandled) return;

  if (filterContext.Exception is PolicyInForceException)
  {
    PolicyInForceException pife = filterContext.Exception as PolicyInForceException;
    filterContext.ExceptionHandled = true;
    filterContext.HttpContext.Response.Clear();
    filterContext.HttpContext.Server.ClearError();

    filterContext.Result = View(
      new RouteValueDictionary(
        new { area = "", controller = "quote", action = "Confirmation", id = pife.RequestId }
      )
    );

  }
  else
  {
    base.OnException(filterContext);
  }
}

1 Ответ

0 голосов
/ 01 февраля 2020

Обычно для перенаправления необходимо вернуть экземпляр RedirectResult. Самый простой способ сделать это - вызвать любой из следующих методов Controller вместо View():

В вашем случае, поскольку вы перенаправляете на указанную c action, вы, вероятно, захотите использовать метод RedirectToAction():

filterContext.Result = RedirectToAction(
  "Confirmation", 
  "Quote", 
  new RouteValueDictionary(new { 
    id = pife.RequestId 
  })
);

Тем не менее, вы также можете использовать RedirectToRoute() с кодом, почти идентичным к вашему оригиналу:

filterContext.Result = RedirectToRoute(
  new RouteValueDictionary(new { 
    area = "", 
    controller = "Quote", 
    action = "Confirmation", 
    id = pife.RequestId 
  })
);

В вашем текущем коде, напротив, вы просто возвращаете представление для текущего действия - и созданный вами RouteValueDictionary возвращается с этим представлением в качестве его просмотреть модель, поэтому, скорее всего, вы видите пустую страницу.

...