0

我为 MVC 应用程序创建了自定义视图。

我让错误冒泡到 Globals.asax 文件中的 Application_Error 处理程序,并重定向到呈现这些视图的错误控制器:

protected void Application_Error(object sender, EventArgs eventArgs)
{
    Exception exception = Server.GetLastError();
    Response.Clear();
    var httpException = exception as HttpException;

    Response.TrySkipIisCustomErrors = true;

    if (httpException != null)
    {
        switch (httpException.GetHttpCode())
        {
            case 404:
                Server.ClearError();
                Response.Redirect(UiConstants.PageNotFoundPage);
                break;
            case 500:
                if (httpException.Message.Equals(UiConstants.NoSessionStateExceptionMsg, StringComparison.Ordinal))
                {
                    Server.ClearError();
                    Response.Redirect(UiConstants.SessionNotAvailablePage);
                }
                else
                {
                    Server.ClearError();
                    Response.Redirect(UiConstants.ServerErrorPage);
                }
                break;
            default:
                Server.ClearError();
                Response.Redirect(UiConstants.ServerErrorPage);
                break;
        }
    }
    else
    {
        Server.ClearError();
        Response.Redirect(UiConstants.ServerErrorPage);
    }
}

在我的开发环境(VS Dev Web Server)中,这是按设计工作的。当我将它部署到测试服务器时,会显示库存的 IIS 错误网页,而不是我的视图。

路由路径正确即servername/StaticContent/PageNotFound

任何想法如何解决这个问题?是否有一些 IIS 设置这样做?

4

1 回答 1

0

我相信我已经确定了我的问题。在本地运行,基地址只是http://localhost:64133/. 所以我所有的重定向都在使用相对路径,例如http://localhost:64133/staticcontent/pagenotfound

但是,当我在我们的开发环境中部署到我的开发服务器时,基本目录的路径略有不同,因为 IIS 应用程序位于名为 WebRequest 的文件夹中,该文件夹位于 wwwroot 内(在 C:\inetpub 中)。

这意味着应用程序的基本 URL 是http://servername/WebRequest/. 所以我的重定向将它发送到http://servername/staticcontent/pagenotfound,而不是http://servername/WebRequest/staticcontent/pagenotfound

对不起那些人。这对你们来说是非常困难的,因为他们不知道环境的弱点。我想我们都可以从中学习。再次感谢。

于 2013-04-07T00:59:25.720 回答