Resonse.Redirect(URL)在global.asax中不起作用

时间:2018-01-09 09:07:11

标签: c# asp.net asp.net-mvc-4 global-asax

根据我的要求,我将返回自定义错误。在 global.asax 应用程序错误中没有重定向任何其他URL。 Response.Redirect(URL)Server.Transfer(URL)未重定向。它显示发送HTTP标头后无法重定向。我试过但不工作。请尽量帮助我。下面是我的代码

try
        {
            Exception exc = Server.GetLastError();
            ErrorLogger LogError = new ErrorLogger();

            // Handle HTTP errors
            if (exc.GetType() == typeof(HttpException))
            {
                ex = (HttpException)Server.GetLastError();
                int httpCode = ex.GetHttpCode();

                // Filter for Error Codes and set text
                if (httpCode >= 400 && httpCode < 500)
                    ex = new HttpException
                          (httpCode, "Safe message for " + httpCode + " HTTP codes.", ex);
                else if (httpCode > 499)
                    ex = new HttpException
                         (ex.ErrorCode, "Safe message for " + httpCode + " HTTP codes.", ex);
                else
                    ex = new HttpException
                        (httpCode, "Safe message for unexpected HTTP codes.", ex);

                // Log the exception and notify system operators
                ErrorLogger.Error(ex);
                Server.ClearError();
                Response.Clear();
                Response.Buffer = true;
                Response.Redirect("http://www.stackoverflow.com");
                if (!Response.IsRequestBeingRedirected)
                    // Will not be called
                    Response.Redirect("http://www.google.com");

                //ScriptManager.RegisterStartupScript(Page, typeof(Page), "OpenWindow", "window.open('ErrorPage.aspx');", true);
                //Response.Write("<script> window.open('http://localhost:54749/ErrorPage.aspx','_blank'); </script>");
                //Response.Redirect("http://www.google.com", true);
                //Response.Redirect("~/ErrorPage.aspx");
            }
            else
            {
                ErrorLogger.Error(exc);
                // LogError.NotifySystemOps(exc);
                // Clear the error from the server
                //Server.ClearError();
            }
        }
        catch (Exception ex)
        {
            ErrorLogger.Error(ex);
        }

3 个答案:

答案 0 :(得分:0)

根据Response.Redirect(string url)的MSDN文档,当&#34;在发送HTTP标头后尝试重定向时,它将抛出HttpException&#34;。由于Response.Redirect(string url)使用了Http&#34;位置&#34;响应标头(http://en.wikipedia.org/wiki/HTTP_headers#Responses),调用它将导致标头被发送到客户端。这意味着,如果您再次拨打电话,或者在您以其他方式发送标头后再拨打电话,则会收到HttpException。

防止多次调用Response.Redirect()的一种方法是在调用之前检查Response.IsRequestBeingRedirected property (bool)

//导致标题发送到客户端(Http "Location" response header

Response.Redirect("http://www.stackoverflow.com");

if (!Response.IsRequestBeingRedirected)
    // Will not be called
    Response.Redirect("http://www.google.com");

注意* 一旦发布重定向301/302,您也无法更改HTTP响应状态代码。

答案 1 :(得分:0)

您是否尝试过Response.Redirect(&#34; http://www.google.com&#34;,true);

你能告诉我们你使用这段代码的global.asax文件的哪一部分。

void Application_BeginRequest(object sender, EventArgs e)
    {
}

或者它在其他地方

也尝试以下代码

HttpContext.Current.Response.Redirect("http://www.google.com/");

答案 2 :(得分:-1)

试试这个:

this.Response.Redirect("http://www.stackoverflow.com");