Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法在MVC应用程序中的HTTP 403上显示自定义错误页_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 无法在MVC应用程序中的HTTP 403上显示自定义错误页

Asp.net mvc 无法在MVC应用程序中的HTTP 403上显示自定义错误页,asp.net-mvc,Asp.net Mvc,我的MVC应用程序中的Global.asax.cs文件中有以下代码,它捕获500个和404个错误,并调用我的ErrorsController,它根据代码返回我的自定义错误页。这个很好用。但是这段代码也应该捕获403个错误(未经授权),这样我的控制器也会显示相应的视图。但当我运行它时,我会看到一个IIS页面显示未经授权的消息。如何让此代码调用我的ErrorsController,接收403代码并显示我的自定义视图 我测试它的方式是在我的一个操作上放置一个[Authorize]属性并调用该操作。我应

我的MVC应用程序中的Global.asax.cs文件中有以下代码,它捕获500个和404个错误,并调用我的ErrorsController,它根据代码返回我的自定义错误页。这个很好用。但是这段代码也应该捕获403个错误(未经授权),这样我的控制器也会显示相应的视图。但当我运行它时,我会看到一个IIS页面显示未经授权的消息。如何让此代码调用我的ErrorsController,接收403代码并显示我的自定义视图

我测试它的方式是在我的一个操作上放置一个[Authorize]属性并调用该操作。我应该得到403错误,并且应该显示我的自定义错误页面

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

        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Errors");
        routeData.Values.Add("action", "Feedback");
        routeData.Values.Add("exception", exception);

        if (exception.GetType() == typeof(HttpException))
        {
            routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
        }
        else
        {
            routeData.Values.Add("statusCode", 500);
        }

        IController controller = new ErrorsController();
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        Response.End();
    }

当您使用Authorize属性时,当授权失败时不会触发应用程序错误,它只会返回一个错误。这就是为什么它没有像您预期的那样工作(而且它不应该像您预期的那样工作)


在.Net MVC中,这种带有自定义错误页的内容有点混乱,但我建议您查看或自定义这些内容,以检查传出响应的状态,并在那里采取适当的操作。

也许这个答案会有所帮助(但我碰巧知道,有一项针对这一问题的简洁开源解决方案的计划即将公开发布,我将在不久的将来继续关注这一点)