我有一个使用防伪的.NET Core 3.1.3 Web应用程序。在台式机和某些平板电脑上的chrome上,一切正常。它可以在装有Firefox的Android设备上正常运行。但是,在Chrome上,某些装有8.1的Android设备会针对启用了防伪的任何ajax调用返回400错误。
某些代码:
<form id="appForm" method="post" role="form">
@Html.AntiForgeryToken();
[AllowAnonymous]
[IgnoreAntiforgeryToken] // adding this to disable anti forgery makes the ajax call work
//[DisableCors]
[HttpPost]
public async Task<JsonResult> AddProduct(int productId)
{
$.ajax({
url: "/Cart/AddProduct/",
data: {
__RequestVerificationToken: $("[name='__RequestVerificationToken']").val(),
productId: $(this).data("productcode")
},
dataType: "json",
type: "POST",
services.AddAntiforgery(o =>
{
o.FormFieldName = "__RequestVerificationToken";
o.HeaderName = "X-XSRF-TOKEN";
//o.SuppressXFrameOptionsHeader = true;
o.Cookie.SameSite = SameSiteMode.None;
o.Cookie.Expiration = TimeSpan.FromDays(7);
});
如果我通过将属性[IgnoreAntiforgeryToken]]添加到我的控制器来关闭防伪,那么ajax调用将在Android设备上运行。否则,它将返回400错误。
[它可以在装有Android 9. *的设备上使用,但不能在装有Android 8.1的手机和平板电脑上使用。
有人可以提出任何可能导致此问题的建议吗?我没有主意,很快就秃了。
谢谢
nb:不需要显式使用@ Html.AntiForgeryToken(),因为Core将使用POST方法为任何表单添加令牌。但是我想尝试明确添加它,看看它是否解决了问题。 las []
我有一个使用防伪的.NET Core 3.1.3 Web应用程序。在台式机和某些平板电脑上的chrome上,一切正常。它可以在装有Firefox的Android设备上正常运行。但是,在Chrome上,某些Android设备...
这原来是Cookie政策。要解决此问题,请在startup.cs中使用:
SameSiteMode.Unspecified;