错误处理HttpModule中有代码将用户重定向到相应的错误页面,但它没有这样做,而是显示错误页面,其中包含技术细节,包括堆栈跟踪。
我正在Visual Studio 2008下维护一个Web应用程序,它在Win XP下运行时运行正常但是我们已经转移到Win 7上,当用户没有正确的时候我遇到了这个问题查看所选数据的权限。我添加了必要的更改以使应用程序在IIS 7下工作,包括将HttpModule添加到<system.webServer><modules>
文件的Web.config
部分。我想知道是否还有其他东西丢失了?
这里有一个问题:我有一个Web表单,它使用一个ObjectDataSource,它调用C#服务层代码文件中的方法GetAppData()来向用户显示数据。服务层文件检查用户是否具有查看数据的正确权限,并且由于他们没有,因此它会抛出InvalidPermissionException
。然后,这会触发Application_Error方法在我的错误处理HttpModule中执行,该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 );
}
答案 0 :(得分:0)
您是否检查过IIS用于托管您网站的应用程序池是否在“Integrated Pipeline”模式下运行?