Перенаправление с Global.asax в Medium Trust - PullRequest
0 голосов
/ 24 февраля 2009

Я пытаюсь выполнить перенаправление в обработчике Application_Error в Global.asax. Ничего особенного.

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 голосов
/ 16 января 2013

У меня была такая же проблема, как и у вас.

Я использовал:

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

И все отлично работает.

0 голосов
/ 11 мая 2009

Сегодня я столкнулся с той же проблемой, но думаю, что нашел обходной путь. Оказывается, что указание кода Response.Status решает эту проблему.

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

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

   // ...snip...
}

К сожалению, если вы отлаживаете страницу, похоже, что ошибка SecurityPermissions все еще происходит. Я не уверен, насколько серьезной является проблема, поскольку Server.Transfer будет продолжаться без ошибок, и пользователь не окажет заметного влияния.

Мне было бы интересно узнать, есть ли у кого-нибудь мысли или мнения по этому вопросу.

...