私は2つのエンティティは以下のように設定します:asp.net mvc5でカスタムathorization属性を作成する方法は?
public class Serial
{
[HiddenInput(DisplayValue=false)]
public int SerialID { get; set; }
[HiddenInput(DisplayValue=false)]
public string Id { get; set; }
[Required(ErrorMessage="Please provide your membership serial")]
[StringLength(16,ErrorMessage="This field can't be longer as of 16 characters.")]
public string UserSerial { get; set; }
}
と
public class Subscription
{
[HiddenInput(DisplayValue=false)]
public int SubscriptionID { get; set; }
[Required(ErrorMessage="Please provide a subscription code.")]
public string AdminSerial { get; set; }
}
私は次のシナリオと私のコントローラ内の私のアクション・メソッドを設計するために、カスタム認可属性を作成したいと思います:
UserSerial
の値がシリアル番号にあるかどうか確認したいと思いますエンティティがサブスクリプションエンティティのAdminSerial
の値と等しくない。 上記の条件が真となってActionResult
メソッド自体を実行する必要がある場合は、それ以外の場合はAuthorizeAttribute
を別のアクションメソッドにリダイレクトする必要がありますが、ここで試したことはありますが、何か不足していますか?
public class RequireSerial : AuthorizeAttribute
{
EFDbContext db = new EFDbContext();
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!db.Subscriptions.Any(s => s.AdminSerial.Equals(db.Serials.Any())))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Serials", action = "Create" }));
}
else
{
// Execute the Action method itself
}
}
}
私はアクションメソッドの上にこのRequireSerial
カスタムAUTHORIZE属性を入れてみましたが、何も実際に起こりません。
[RequireSerial]
public ViewResult Checkout()
{
return View();
}
助けてください。
何をしたらいいですか? –
カスタム認可のクラスを作成するときは、IsAuthorized関数をオーバーライドする必要があります。 –