【问题标题】:ASP.NET custom error handling HttpModule is not redirecting to desired error handling pageASP.NET 自定义错误处理 HttpModule 未重定向到所需的错误处理页面
【发布时间】:2015-03-10 06:35:52
【问题描述】:

错误处理 HttpModule 中有代码将用户重定向到相应的错误页面,但它没有这样做,而是显示错误页面以及技术细节,包括堆栈跟踪。

我在 Visual Studio 2008 下维护一个 Web 应用程序,以前在 Win XP 下运行它时运行良好,但我们已经转移到 Win 7,当用户没有正确的查看所选数据的权限。我添加了必要的更改以使应用程序在 IIS 7 下运行,包括将 HttpModule 添加到 Web.config 文件的 <system.webServer><modules> 部分。我想知道是否还缺少其他东西?

这里是详细的问题:我有一个 Web 窗体,它使用一个 ObjectDataSource,它调用 C# 服务层代码文件中的方法 GetAppData() 来向用户显示数据。服务层文件检查用户是否具有查看数据的正确权限,如果没有,它会抛出InvalidPermissionException。然后这会触发 Application_Error 方法在我的错误处理 HttpModule 中执行,该方法会捕获错误并将用户重定向到InvalidPermissionError.aspx 页面;但是,我看到的是带有技术细节和堆栈跟踪的错误页面。如何让它显示用户友好的错误页面?

以下是相关代码(我没有全部包含在内):

图 1:网络表单

<asp:ObjectDataSource ID="appDataSource" runat="server" 
                      TypeName="Services.App.IAppService"
                      SelectMethod="GetAppData" 
                      OnSelecting="appDataSource_Selecting" 
                      OnObjectCreating="appDataSource_Creating">
    <SelectParameters>
        <asp:Parameter Name="Id" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

图 2:自定义错误处理 HttpModule

public class ErrorModule : IHttpModule
{
    protected void Application_Error( object sender, EventArgs e )
    {
        if ( sender is System.Web.HttpApplication )
        {
            HttpApplication application = (HttpApplication)sender;

            Exception exception = application.Server.GetLastError();
            Exception baseException = exception.GetBaseException();

            if ( exception is InvalidPermissionException )
            {
                HandleInvalidPermissionException(application, 
                    (InvalidPermissionException)exception );
            }
            else if ( baseException.GetBaseException() is InvalidPermissionException )
            {
                HandleInvalidPermissionException( application, 
                    (InvalidPermissionException)baseException );
            }
        }

图 3:页面重定向代码

private void HandleInvalidPermissionException( HttpApplication application, InvalidPermissionException exception )
{
    application.Response.Redirect(String.Format("InvalidPermissionError.aspx?id={0}" , 
        application.Request.Params["id"]) );
    application.Server.ClearError();
    Log.Error( exception.Message, exception );
}

【问题讨论】:

    标签: c# asp.net redirect httpmodule ihttpmodule


    【解决方案1】:

    您是否检查过 IIS 用于托管您网站的应用程序池是否在“集成管道”模式下运行?

    【讨论】:

    • 你是对的。它以集成模式运行。我切换到经典模式并解决了问题。
    猜你喜欢
    • 2010-10-20
    • 2011-01-29
    • 2010-12-07
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2020-10-20
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多