В C #, как перенаправить пользователей на страницу aspx из-за ошибки доступа? - PullRequest
4 голосов
/ 13 июня 2011

У меня есть веб-приложение на C #, я указал некоторые параметры безопасности, позволяющие только 3 пользователям заходить на сайт:

<authentication mode="Windows"/>
<authorization>
    <allow users="DOMAIN\john,DOMAIN\mary,DOMAIN\jesus" />
    <deny users="*" />
</authorization>

Кажется, что разрешение работает, поскольку они могут войти, но люди с другими входами в системуне могу войти (это нормально).

Теперь проблема в том, как отловить ошибку 401.2 , не касаясь IIS, чтобы перехватить ошибку «Доступ запрещен» и перенаправить пользователя к пользователю.дружественная страница aspx.

Я пытался добавить код в global.asasx Application_OnError, но он не работает.

Как перенаправить пользователя в подпапку ошибок, например /errors/AccessDenied.aspx страницу, когда онине авторизованы?

Ответы [ 3 ]

4 голосов
/ 13 июня 2011

Добавьте пользовательский раздел об ошибках в ваш файл web.config, например

<customErrors mode="On" defaultRedirect="/ErrorPages/AppError.html">
    <error statusCode="401" redirect="/ErrorPages/401-2.html" />
</customErrors>

Если это не помогает, попробуйте добавить следующий код в ваш Global.asax

PrivateSub Global_EndRequest(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMyBase.EndRequest
If Response.StatusCode = 401 AndAlso Request.IsAuthenticated = TrueThen
Response.ClearContent()
Server.Execute("~/ErrorPages/401-2.html")
EndIf
EndSub
2 голосов
/ 10 февраля 2014

Этот вопрос может быть старым, но я нашел его при попытке решить ту же проблему в MVC.Если я могу просто расширить окончательное решение @ JuniorMayhe, я надеюсь, что это поможет кому-то еще.

Для своего проекта я отредактировал файл Global.asax, чтобы перенаправить его на маршрут, который я создал для ошибок 401, отправив пользователя напредставление «Несанкционировано видеть это».

В Global.asax (как он говорит выше, но при этом используются маршруты MVC):

    void Application_EndRequest(object sender, System.EventArgs e)
    {
        // If the user is not authorised to see this page or access this function, send them to the error page.
        if (Response.StatusCode == 401)
        {
            Response.ClearContent();
            Response.RedirectToRoute("ErrorHandler", (RouteTable.Routes["ErrorHandler"] as Route).Defaults);
        }
    }

и в Route.config:

        routes.MapRoute(
        "ErrorHandler",
        "Error/{action}/{errMsg}",
        new { controller = "Error", action = "Unauthorised", errMsg = UrlParameter.Optional }
        );

и в контроллере:

    public ViewResult Unauthorised()
    {
        //Response.StatusCode = 401; // Do not set this or else you get a redirect loop
        return View();
    }
0 голосов
/ 13 июня 2011

Вы можете вставить тег местоположения, чтобы сообщить приложению, что папки с ошибками имеют разрешение.

  <location path="errors">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...