ASP.NET перенаправить на страницу, когда на странице возникает определенная ошибка - PullRequest
0 голосов
/ 28 августа 2018

Извините, если это повторяющийся вопрос. Однако я попытался найти ответ и не могу его найти.

Есть ли способ в ASP.NET перенаправить на страницу, когда возникает конкретная ошибка (в моем случае, когда запрос слишком велик). Это должно происходить только тогда, когда ошибка возникает на определенной странице, а не только на любой странице.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Да! есть следующее:

В файле Global.asax:

protected void Application_Error(object sender, EventArgs e)
{
     Exception exception = Server.GetLastError();

     HttpException httpException = exception as HttpException;

     if (httpException != null)
     {
         if (httpException.GetHttpCode() == 404)
         {
              Server.ClearError();
              Response.Redirect("~/Home/PageNotFound");
              return;
         }
     }

     //Ignore from here if don't want to store the error in database

     HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
     RouteData routeData = RouteTable.Routes.GetRouteData(context);

     string controllerName = null;
     string actionName = null;
     if (routeData != null)
     {
         controllerName = routeData.GetRequiredString("controller");
         actionName = routeData.GetRequiredString("action");
     }


     ExceptionModel exceptionModel = new ExceptionModel()
     {
         ControllerName = controllerName ?? "Not in controller",
         ActionOrMethodName = actionName ?? "Not in Action",
         ExceptionMessage = exception.Message,
         InnerExceptionMessage = exception.InnerException != null ? exception.InnerException.Message : "No Inner exception",
         ExceptionTime = DateTime.Now
     };

     using (YourDbContext dbContext = new YourDbContext())
     {
         dbContext.Exceptions.Add(exceptionModel);
         dbContext.SaveChanges();
     }

    // Ignore till here if you don't want to store the error on database

    // clear error on server
    Server.ClearError();
    Response.Redirect("~/Home/Error");
}

Тогда в контроллере:

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Error()
    {
        return View();
    }

    [AllowAnonymous]
    public ActionResult PageNotFound()
    {
        return View();
    }
}

Здесь есть все, что вам нужно для обработки ошибок в приложении ASP.NET MVC. Вы также можете настроить его в соответствии со своими предпочтениями.

0 голосов
/ 28 августа 2018

Как говорит ADyson в комментариях, возможно, для этой ситуации можно использовать блок try - catch.

try
{
    // put the code that you want to try here
}
catch(Exception specificException)
{
    return RedirectToAction(actionName, controllerName, routeValues);
}

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...