0

我试图在 Global.asax 的 Application_Error 处理程序中进行重定向。一点都不花哨。

private void Application_Error(object sender, EventArgs e)
{
   // ...snip...

   Server.Transfer(somePath, false);

   // ...snip...
}

这在完全信任下工作得很好,但我需要让它在中等信任下工作。我在这里工作的代码需要在共享托管环境中正常运行(不幸的是,我无法控制这个要求)。

但是,当我在我们的开发环境(XP Pro / IIS 5.1)中配置站点以进行测试时:

<system.web>
  <trust level="Medium"/>
</system.web>

它失败并出现以下错误:

请求“System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限失败。**
   在 System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark& stackMark,布尔 isPermSet)
   在 System.Security.CodeAccessPermission.Demand()
   在 System.Web.HttpWorkerRequest.SendResponseFromMemory(IntPtr 数据,Int32 长度)
   在 System.Web.HttpWorkerRequest.SendResponseFromMemory(IntPtr 数据,Int32 长度,布尔 isBufferFromUnmanagedPool)
   在 System.Web.HttpResponseUnmanagedBufferElement。
      System.Web.IHttpResponseElement.Send(HttpWorkerRequest WR)
   在 System.Web.HttpWriter.Send(HttpWorkerRequest WR)
   在 System.Web.HttpResponse.Flush(布尔 finalFlush)
   在 System.Web.HttpResponse.Flush()
   在 System.Web.HttpResponse.End()
   在 System.Web.HttpServerUtility.Transfer(字符串路径,布尔值 preserveForm)

其他一些值得注意的事情:

  • 无论是从 Global.asax 还是从 HttpModule 都会发生这种情况。
  • Response.Redirect(somePath) 也会发生这种情况。

感谢您提供的任何见解。我已经在谷歌上搜索了我的 $$ 折扣,但并不高兴。

谢谢!

4

2 回答 2

0

我和你有同样的问题。

我用了:

Response.Redirect("~/ErrorRedirectPage.aspx",false);

它工作正常。

于 2013-01-16T11:36:37.357 回答
0

我今天遇到了同样的问题,但我想我找到了一个可以接受的解决方法。事实证明,指定 Response.Status 代码可以解决此问题。

private void Application_Error(object sender, EventArgs e)
{
   // ...snip...

   Response.StatusCode = 500;
   Server.Transfer(somePath, false);

   // ...snip...
}

不幸的是,如果您调试页面,似乎仍然会出现 SecurityPermissions 错误。我不确定这到底有多少问题,因为 Server.Transfer 将继续没有错误,并且对用户没有明显影响。

我很想知道是否有人对此事有想法或意见。

于 2009-05-11T19:58:42.407 回答