1

許可されていないユーザーが管理者ページにアクセスしているときに、それらをカスタム ページにリダイレクトしようとしていますが、エラーが発生します..

管理者フォルダーの Web.Config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="Administrators" />
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

ログインページのコード:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Request.IsAuthenticated && !string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
                    Response.Redirect("~/ErrorUNTH.aspx");
            }
}

エラー NORMAL USER としてログインし、管理者ページにアクセスした後:

Server Error in '/' Application.
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".


<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>


Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.


<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration>
4

2 に答える 2

2

削除 <deny users="*"/>して追加<deny users="?"/>

  1. ?- 匿名ユーザー
  2. *- 全てのユーザー

また、イベントからコードを削除します。Page_Load

ユーザーがログインしていない場合、自動的にlogin.aspxにリダイレクトされます。<authentication>root のセクションを見てくださいweb.config

<authentication mode="Forms">
        <forms loginUrl ="mylogin.aspx"/> <!-- You can change the url -->
</authentication>
于 2012-07-20T10:38:00.930 に答える
0

Global.asax.cs の Application_EndRequest イベントに次のコードを追加することで、"401 Access Denied" 応答の内容を操作できます (この場合)。

protected void Application_EndRequest(Object sender, 
                                             EventArgs e)
  { 
     HttpContext context = HttpContext.Current;
     if (context.Response.Status.Substring(0,3).Equals("401"))
     {
        context.Response.ClearContent();
        context.Response.Write("<script language="javascript">" + 
                     "self.location='../login.aspx';</script>");
     } 
  }

ブラウザーが 401 を認識し、資格情報がない場合、クライアント側のリダイレクトが行われます。ブラウザにカスタム 401 ページが表示されます。

于 2012-07-20T10:48:12.540 に答える