Отображение пользовательских страниц ошибок на IIS 7.5 и IIS 7 - PullRequest
1 голос
/ 11 октября 2011

Я использую Asp.net 4 C # и IIS 7 локально и IIS 7.5 на производственном сервере.

Мне нужно отобразить пользовательские страницы ошибок. В настоящее время я использую некоторую логику в моем Global.asax для обхода страниц IIS по умолчанию. Локально, используя IIS 7, я смог успешно отобразить пользовательские страницы, но на рабочем месте (IIS 7.5) настройки сервера по умолчанию IIS-страницы остаются. Я использую Response.TrySkipIisCustomErrors = true;, но на Производственном сервере не работает.

Не могли бы вы указать мне решение этой проблемы?

Мой код в Global.Asax

Application_Error

Response.TrySkipIisCustomErrors = true;
                if (ex is HttpException)
                {
                    if (((HttpException)(ex)).GetHttpCode() == 404)
                    {

                        Server.Transfer("~/ErrorPages/404.aspx");
                    }
                }
                // Code that runs when an unhandled error occurs.
                Server.Transfer("~/ErrorPages/Error.aspx");

1 Ответ

2 голосов
/ 11 октября 2011

Я сделал это в модуле, а не в Global.asax, и подключил его к стандартным пользовательским ошибкам.Попробуйте:

public class PageNotFoundModule : IHttpModule
{
    public void Dispose() {}

    public void Init(HttpApplication context)
    {
        context.Error += new EventHandler(context_Error);
    }

    private void context_Error(object sender, EventArgs e)
    {
        var context = HttpContext.Current;

        // Only handle 404 errors
        var error = context.Server.GetLastError() as HttpException;
        if (error.GetHttpCode() == 404)
        {
            //We can still use the web.config custom errors information to decide whether to redirect
            var config = (CustomErrorsSection)WebConfigurationManager.GetSection("system.web/customErrors");

            if (config.Mode == CustomErrorsMode.On || (config.Mode == CustomErrorsMode.RemoteOnly && context.Request.Url.Host != "localhost"))
            {
                //Set the response status code
                context.Response.StatusCode = 404;

                //Tell IIS 7 not to hijack the response (see http://www.west-wind.com/weblog/posts/745738.aspx)
                context.Response.TrySkipIisCustomErrors = true;

                //Clear the error otherwise it'll get handled as usual
                context.Server.ClearError();

                //Transfer (not redirect) to the 404 error page from the web.config
                if (config.Errors["404"] != null)
                {
                    HttpContext.Current.Server.Transfer(config.Errors["404"].Redirect);
                }
                else
                {
                    HttpContext.Current.Server.Transfer(config.DefaultRedirect);
                }
            }
        }
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...