Как переопределить настройки web.config customErrors во время выполнения? - PullRequest
0 голосов
/ 20 июня 2011

У меня есть следующий код в файле web.config для моего приложения ASP.NET C #, которое хранится в Azure:

<!-- Turn on Custom Errors -->
<!-- Switch the mode to RemoteOnly for Retail/Production -->
<!-- Switch the mode to On for to see error pages in the IDE during development -->
<customErrors mode="On" defaultRedirect="ErrorPage.aspx">
   <error statusCode="403" redirect="ErrorPage403.aspx"/>
   <error statusCode="404" redirect="ErrorPage404.aspx"/>
</customErrors>

Это прекрасно работает для ошибок, когда яизначально попал на сайт моего сайта (http://ipredikt.com/ErrorPage.aspx),, но у меня также есть версия приложения для Facebook, в которой все страницы используют разные MasterPage и, следовательно, разные URL (http://ipredikt.com/ErrorPageFB.aspx).

Возможно ли это изменить значения перенаправления customError во время выполнения , когда я работаю в режиме приложения Facebook, как если бы у меня были следующие настройки в web.config:

<customErrors mode="On" defaultRedirect="ErrorPageFB.aspx">
   <error statusCode="403" redirect="ErrorPage403FB.apx"/>
   <error statusCode="404" redirect="ErrorPage404FB.apx"/>
</customErrors>

Я не думаю,Я могу установить это в области приложения, так как в моем приложении есть отдельные страницы , которые знают, работают ли они в режиме Facebook.

Ответы [ 4 ]

1 голос
/ 20 июня 2011

Итак, вот решение грубой силы. Я использую это на странице для режима без Facebook 404 ошибки:

  protected override void OnInit(System.EventArgs e)
  {         
     // If the user tries, for example, to navigate to" /fb/foo/bar
     // then the Request.Url.Query will be as follows after the 404 error: ?aspxerrorpath=/fb/foo/bar
     string queryString = Request.RequestContext.HttpContext.Request.Url.Query;

     string[] str = queryString.Split('=');

     if (str.Length > 0)
     {
        string[] str2 = str[1].Split('/');

        if (str2.Length > 1)
        {
           string test = str2[1].ToLowerInvariant();

           if (test == "fb")
           {
              string pathAndQuery = Request.RequestContext.HttpContext.Request.Url.PathAndQuery;
              string absolutePath = Request.RequestContext.HttpContext.Request.Url.AbsolutePath;

              string mungedVirtualPath = pathAndQuery.Replace(absolutePath, "/ErrorPage404FB.aspx");

              Response.Redirect(mungedVirtualPath);
           }
        }
     }

     base.OnInit(e);
  }

Вряд ли идеально, но работает.

1 голос
/ 20 июня 2011

Привет, я думаю, что вы можете сделать еще одно перенаправление на своей странице ошибки в соответствии с реферером - Request.UrlReferrer, когда реферер равен нулю, поэтому убедитесь, что вы справились с этим

1 голос
/ 20 июня 2011

«Режим Facebook» выглядит как то, что вы можете отследить в сеансе, что будет доступно в ErrorPage.aspx, чтобы инициировать передачу в ErrorPageFB.aspx.

Обновление - вы можете немного очистить ваше решение для перебора, используя Request.QueryString:

protected override void OnInit(System.EventArgs e)
{         
    // If the user tries, for example, to navigate to" /fb/foo/bar
    // then the Request.Url.Query will be as follows after the 404 error: ?aspxerrorpath=/fb/foo/bar
    var requestedPath = Request.RequestContext.HttpContext.Request.QueryString["aspxerrorPath"];

    if (requestedPath.StartsWith("/fb/", StringComparison.OrdinalIgnoreCase))
    {
        var requestedUrl = Request.RequestContext.HttpContext.Request.Url;
        var pathAndQuery = requestedUrl.PathAndQuery;
        var absolutePath = requestedUrl.AbsolutePath;

        var mungedVirtualPath = pathAndQuery.Replace(absolutePath, "/ErrorPage404FB.aspx");

        Response.Redirect(mungedVirtualPath);
    }

    base.OnInit(e);
}

Действительно ли Request.RequestContext.HttpContext.Request возвращает экземпляр, отличный от простого Request?

0 голосов
/ 20 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...