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
C# 如何在Asp.Net MVC中处理Global.asax文件中抛出的错误_C#_Asp.net Mvc_Error Handling - Fatal编程技术网

C# 如何在Asp.Net MVC中处理Global.asax文件中抛出的错误

C# 如何在Asp.Net MVC中处理Global.asax文件中抛出的错误,c#,asp.net-mvc,error-handling,C#,Asp.net Mvc,Error Handling,我已经搜索并尝试了很多文章,但仍然不能解决这个问题。 我在Global.asax文件中有以下代码: LogInClient("username", "password"); 由于Windows Azure中发生了更新,我的所有服务(REST)都找不到(但这是另一回事)。 web显示错误的请求错误。我想发生的是,对于任何类型的错误,站点都会直接进入错误页面 但我总是被引导到这一点 http://127.0.0.1:81/Error?aspxerrorpath=/ https://127.0.0.

我已经搜索并尝试了很多文章,但仍然不能解决这个问题。 我在Global.asax文件中有以下代码:

LogInClient("username", "password");
由于Windows Azure中发生了更新,我的所有服务(REST)都找不到(但这是另一回事)。 web显示错误的请求错误。我想发生的是,对于任何类型的错误,站点都会直接进入错误页面

但我总是被引导到这一点

http://127.0.0.1:81/Error?aspxerrorpath=/
https://127.0.0.1/Error?aspxerrorpath=/
我正在通过云项目运行我的Asp.NETMVC项目

这就是我到目前为止所做的:

Web.Config

<customErrors mode="On" defaultRedirect="Error"/>


我在这里迷路了。请提供帮助。

您可以在您的global.asax中使用此功能:

    void Application_Error( object sender, EventArgs e )
    {
        Boolean errorRedirect = false;
        Boolean redirect404 = false;
        try
        {
            var exception = Server.GetLastError();
            var httpException = exception as HttpException;
            Response.Clear();
            Server.ClearError();
            var routeData = new RouteData();
            routeData.Values[ "controller" ] = "Errors";
            routeData.Values[ "action" ] = "General";
            routeData.Values[ "exception" ] = exception;
            Response.StatusCode = 500;
            if ( httpException != null )
            {
                Response.StatusCode = httpException.GetHttpCode();
                switch ( Response.StatusCode )
                {
                    case 403:
                        redirect404 = true;
                        break;
                    case 404:
                        redirect404 = true;
                        break;
                    default:
errorRedirect = true;
                        //todo: log errors in your log file here
                        break;
                }
            }

        }
        catch ( Exception ex )
        {
            errorRedirect = true;
        }

        if ( redirect404 )
        {
            //redirect to 404 page
            Response.Redirect( "~/404.htm" );
        }
        else if ( errorRedirect )
        {
            //redirect to error page
            Response.Redirect( "~/error.htm" );
        }
    }
另外,一些错误无法被global.asax捕获,因此,您还需要通过将以下内容放入所有aspx CodeBehind中,或者最好是放入扩展
System.Web.UI.Page
的单个类中来捕获aspx错误,然后让您的所有CodeBehind从该类继承。代码如下:

    protected override void OnError( EventArgs e )
    {
        try
        {
            //todo: log errors in your log files
        }
        catch ( Exception ex ) { }
        //redirect to error page
        Response.Redirect( "~/error.htm" );
    }

您可以在您的global.asax中使用:

    void Application_Error( object sender, EventArgs e )
    {
        Boolean errorRedirect = false;
        Boolean redirect404 = false;
        try
        {
            var exception = Server.GetLastError();
            var httpException = exception as HttpException;
            Response.Clear();
            Server.ClearError();
            var routeData = new RouteData();
            routeData.Values[ "controller" ] = "Errors";
            routeData.Values[ "action" ] = "General";
            routeData.Values[ "exception" ] = exception;
            Response.StatusCode = 500;
            if ( httpException != null )
            {
                Response.StatusCode = httpException.GetHttpCode();
                switch ( Response.StatusCode )
                {
                    case 403:
                        redirect404 = true;
                        break;
                    case 404:
                        redirect404 = true;
                        break;
                    default:
errorRedirect = true;
                        //todo: log errors in your log file here
                        break;
                }
            }

        }
        catch ( Exception ex )
        {
            errorRedirect = true;
        }

        if ( redirect404 )
        {
            //redirect to 404 page
            Response.Redirect( "~/404.htm" );
        }
        else if ( errorRedirect )
        {
            //redirect to error page
            Response.Redirect( "~/error.htm" );
        }
    }
另外,一些错误无法被global.asax捕获,因此,您还需要通过将以下内容放入所有aspx CodeBehind中,或者最好是放入扩展
System.Web.UI.Page
的单个类中来捕获aspx错误,然后让您的所有CodeBehind从该类继承。代码如下:

    protected override void OnError( EventArgs e )
    {
        try
        {
            //todo: log errors in your log files
        }
        catch ( Exception ex ) { }
        //redirect to error page
        Response.Redirect( "~/error.htm" );
    }

实际上,我已经尝试了您的第一个代码块,它将抛出一个错误,因为
响应
尚不可访问,因为该错误是在应用程序启动时抛出的。但我将尝试您的第二个代码块。我一测试出来就给你更新。谢谢实际上,我已经尝试了您的第一个代码块,它将抛出一个错误,因为
响应
尚不可访问,因为该错误是在应用程序启动时抛出的。但我将尝试您的第二个代码块。我一测试出来就给你更新。谢谢