从中型信任中的Global.asax重定向

时间:2009-02-24 06:59:29

标签: redirect httpmodule global-asax medium-trust

我正在尝试在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>

失败并出现以下错误:

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.**
   at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at System.Web.HttpWorkerRequest.SendResponseFromMemory(IntPtr data, Int32 length)
   at System.Web.HttpWorkerRequest.SendResponseFromMemory(IntPtr data, Int32 length, Boolean isBufferFromUnmanagedPool)
   at System.Web.HttpResponseUnmanagedBufferElement.
      System.Web.IHttpResponseElement.Send(HttpWorkerRequest wr)
   at System.Web.HttpWriter.Send(HttpWorkerRequest wr)
   at System.Web.HttpResponse.Flush(Boolean finalFlush)
   at System.Web.HttpResponse.Flush()
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)

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

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

欣赏您可以提供的任何见解。我用谷歌搜索了我的一个$$,没有快乐。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

   // ...snip...
}

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

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

答案 1 :(得分:0)

我遇到了和你一样的问题。

我用过:

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

它运作正常。