У меня есть веб-приложение. NET Core 3.1.3, в котором используется защита от подделки. Все отлично работает на chrome на десктопе и некоторых планшетах. Он отлично работает на Android устройствах с Firefox. Однако на Chrome некоторых Android устройствах с 8.1 на них возвращается 400 ошибок для любого ajax вызова, для которого включена защита от подделки.
Некоторый код:
Форма:
<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:
$.ajax({
url: "/Cart/AddProduct/",
data: {
__RequestVerificationToken: $("[name='__RequestVerificationToken']").val(),
productId: $(this).data("productcode")
},
dataType: "json",
type: "POST",
Startup.cs
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. Но я хотел попробовать добавить его явно, чтобы увидеть, решит ли он проблему. Увы нет.