10

セットアップ (MVC 4 を使用)

public class MyAuthorizeAttribute : AuthorizeAttribute {

    protected override bool AuthorizeCore(HttpContextBase httpContext) {

        var isAuthorised = base.AuthorizeCore(httpContext);

        if(isAuthorised) {
            // retrieve authentication ticket from cookie and
            // create custome principal and attach to 
            // httpContext.User
        }

        return isAuthorised;
    }
}

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new MyAuthorizeAttribute());
}

HomeController.cs:

using System.Web.Mvc;

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }
}

問題

ホームページを呼び出すと、ログイン ページが強制的に読み込まれます。

質問

HomeController.Index() アクションが [AllowAnonymous] で装飾されている場合、ASP がログイン ビューにリダイレクトするのはなぜですか?

この記事を参考にしています

4

4 に答える 4

11

元の質問に対する私のコメントによると。問題は、インデックス ビューが部分ビューを返す他のコントローラーでアクションを呼び出していたことです。すべてを調べて、古い [Authorize] 属性を削除するだけです。

于 2012-06-15T07:51:50.323 に答える
5

元の投稿者は彼のケースで原因を発見しましたが、同じ症状に直面したときにこの質問に出くわしたので、私の解決策を共有したいと思います.

私のweb.configファイルでは、Webフォームのロジックに従っています:

<authorization>
  <deny users="?" />
</authorization>

リダイレクトが行われるログインアクションを除いて、最初にログインせずにリクエストがアクションを実行するのを防ぐため、これを持ってはなりません。これは、2 つ目のパブリック アクションを追加しようとしたときに初めて発見されました。

于 2013-06-28T15:13:33.430 に答える
2

私も同様の問題を抱えていて、結局間違ったAllowAnonymousAttributeクラスを使用しました。2つのAllowAnonymousAttributeクラスがあります。

あなたの場合、もちろんあなたはSystem.Web.Mvc:)からのものを使わなければなりません

私は自分のプログラムでそれを理解するために1時間以上費やしました

于 2012-11-22T13:19:32.507 に答える
-1

これは答えではありませんが..

Authorize組み込みコードを試して、AllowAnonymous正常に動作することを確認してください。私はあなたがしようとしているあなたのカスタム認可コメントを見ます

Cookie から認証チケットを取得し、カスタム プリンシパルを作成して httpContext.User にアタッチします。

このスレッドApplication_AuthenticateRequestGlobal.asax.cs指定されているように、そのプロセスを非常に早い段階で行うことをお勧めします。

于 2012-06-14T13:12:16.757 に答える