c# - 如何处理Asp.Net MVC中Global.asax文件内的引发错误

标签 c# asp.net-mvc error-handling

我已经搜索并尝试了许多文章,但仍然无法解决此问题。
我在Global.asax文件中有以下代码:

LogInClient("username", "password");

由于Windows Azure中发生了更新,因此无法找到我的所有服务(REST)(但这是另一个故事)。
网络显示错误请求错误。我要发生的是,对于任何类型的错误,网站都会重定向到错误页面。

但是我总是被重定向到这个
http://127.0.0.1:81/Error?aspxerrorpath=/
https://127.0.0.1/Error?aspxerrorpath=/

我正在通过Cloud项目运行Asp.Net MVC项目。

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

Web配置
<customErrors mode="On" defaultRedirect="Error"/>

Global.asax文件
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}  



我在这里迷路了。请帮忙。

最佳答案

您可以在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错误,方法是将以下内容放在所有aspx代码的后面,或者最好放在扩展了System.Web.UI.Page的单个类中,然后让所有的codebehinds从该类继承。放置在那里的代码如下:
    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" );
    }

关于c# - 如何处理Asp.Net MVC中Global.asax文件内的引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621456/

相关文章:

asp.net-mvc - 尝试在 ASP.NET MVC 中使用 Automapper 时,如何消除 SecurityException 错误?

r - 使用Shiny中的if/else block 进行警告处理

C# - 如何为 MdiChildren 设置一个小的 Mdi "area"?

html - View 底部的白框

c# - 在 C#.Net 中创建 .dll 文件

asp.net-mvc - 利用 Azure 上的 MVC 站点的浏览器缓存

javascript - 如何测试抛出新的错误JavaScript

node.js - Node 连接超时 : how to suppress "ServiceUnavailableError: Response timeout" log message

c# - 当 Eval 返回 null 时,如何删除超链接的额外空间?

c# - 缺少 System.Windows.Controls.DataVisualization.Charting 程序集引用