MVCコードをバージョン2.0から4.0にアップグレードしました。 これで、次のエラーが表示されます。 "必要な偽造トークンが提供されていないか、無効です。"AntiForgeryTokenが無効です
は私がValidateAntiForgeryTokenAttribute.csに以下のコードを追加している:「filterContext」で
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
string httpMethodOverride = filterContext.HttpContext.Request.GetHttpMethodOverride();
if (!this.verbs.Verbs.Contains(httpMethodOverride, StringComparer.OrdinalIgnoreCase))
{
return;
}
AntiForgeryDataSerializer antiForgeryDataSerializer = new AntiForgeryDataSerializer();
AntiForgeryData antiForgeryData = new AntiForgeryData();
string fieldName = antiForgeryData.GetAntiForgeryTokenName(null);
string cookieName = antiForgeryData.GetAntiForgeryTokenName(filterContext.HttpContext.Request.ApplicationPath);
HttpCookie cookie = filterContext.HttpContext.Request.Cookies[cookieName];
if (cookie == null || String.IsNullOrEmpty(cookie.Value))
{
throw CreateValidationException();
}
AntiForgeryData cookieToken = antiForgeryDataSerializer.Deserialize(cookie.Value);
//Rest of the code here//
}
は、クッキー名は「_RequestVerificationToken」であると、私はパス名を追加します。パス名はBase64でエンコードされ、AntiForgeryFieldNameに追加され、これは "_RequestVerificationToken_Lw__"になります。 クッキーが存在するかどうかを確認すると、明らかに見つからず、AntiForgery例外が発生します。 しかし、このコードの古いバージョンでは、 "filterContext"のCookie値は "_RequestVerificationToken_Lw__"となり、正常に動作します。 ここで問題はどこにありますか?それはマシンキーや何か他のものに関係していますか?
ありがとうございます。
ここで何をやっているのか分かりません。反偽造はMVCに組み込まれています。独自の属性は必要ありません。あなたのコントローラのアクションで組み込みの 'ValidationAntiForgeryToken'属性を使用し、ビューで' @ Html.AntiForgeryToken() 'を使用してください。 –