某些Android设备的防伪问题

问题描述 投票:0回答:1

我有一个使用防伪的.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:

 $.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方法为任何表单添加令牌。但是我想尝试明确添加它,看看它是否解决了问题。 las []

我有一个使用防伪的.NET Core 3.1.3 Web应用程序。在台式机和某些平板电脑上的chrome上,一切正常。它可以在装有Firefox的Android设备上正常运行。但是,在Chrome上,某些Android设备...

android google-chrome asp.net-core http-status-code-400 antiforgerytoken
1个回答
0
投票

这原来是Cookie政策。要解决此问题,请在startup.cs中使用:

SameSiteMode.Unspecified;
© www.soinside.com 2019 - 2024. All rights reserved.