1

AuthorizeAttribute

public class PSAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    {
        return false;
    }        
}

テストクラス

[TestClass]
public class Test
{
    [TestMethod]        
    public void TestMethod()
    {
        Assert.IsNotNull(TestMore());
    }

    [PSAuthorize]
    public string TestMore()
    {
        return "Test Success";
    }
}

App.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
    <add name="Defaultconnection" connectionString="Private"/>
</connectionStrings>
<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="2880"/>
    </authentication>

    <membership defaultProvider="CMSP">
        <providers>

            <add name="CMSP"
                 type="PS.Authentication.CustomMembershipProvider"
                 connectionStringName ="Defaultconnection"/>
        </providers>
    </membership>
</system.web>
</configuration>

問題

私はこれに数時間取り組んでいます...

これまでのところ、AuthorizeCoreトリガーを取得できず、何が問題なのかわかりません。

新しい MVC (v3) プロジェクトを作成し、そこに同じコードを追加しようとしましたが、動作します..しかし、私たちのプロジェクトでは突然動作しません...

私は何かを逃しています..?

カスタムメンバーシッププロバイダーと組み合わせてこれを機能させようとしていますが、方法がわかりません...まず、人が承認されていないときに停止をトリガーするには、この属性が必要です。

CustomMembershipProvider は、すべてのプロパティ/メソッドで「throw new NotImplementedException()」のみを使用するメンバーシップのオーバーライドです。

4

1 に答える 1

1

コントローラをアクション メソッドとして装飾するには、Authorize 属性を使用する必要があります。

なんで?属性には、すべてのリクエストで受信される http コンテキストが必要なためです。テスト メソッドはこのコンテキストを提供できません。さらに、属性は HttpContext が提供されていない場合でも使用されません。

アクションメソッドをテストして、それがうまくいくかどうかを確認してください

[PSAuthorize]
public ActionResult Home()
{
    return View();
}

これが機能する場合は、テスト プロジェクトに http コンテキストを挿入する方法を見つけてください。

于 2013-03-13T14:20:27.663 に答える