【问题标题】:Ajax post to ASP .NET 2.2 Razor page gives 404 errorAjax 发布到 ASP .NET 2.2 Razor 页面出现 404 错误
【发布时间】:2019-04-03 02:34:37
【问题描述】:

我似乎无法让它与最新的 .NET Core 2.2 Razor 一起使用。 我对 URL 进行了硬编码,只是为了确保它是正确的。 ajax 脚本在局部视图中,但我确实测试了将脚本移动到主页面,并得到相同的 404 结果。

$.ajax({
    type: 'POST',
    url: 'https://localhost:44349/Admin/Catalog/Products/Edit?handler=Filter&id=1',
    success: function (data) {
        alert("success");
    },
    error: function (xhr, textStatus, error) {
        alert(xhr.statusText);
    }
});

这是我的处理程序:

public IActionResult OnPostFilter(int id)
        {
            return new JsonResult("test");
        }

我在 Startup 中禁用了 AntiForgery Token 只是为了确保这不会导致我的问题:

    services.AddMvc().AddRazorPagesOptions(o =>
    {
        o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
    });

【问题讨论】:

  • Admin/Catalog/Products/Edit 代表什么?与我们分享您的完整剃须刀页面和项目结构。
  • 这是一个页面:Areas > Admin > Pages > Catalog > Products > Edit.cshtml ...我可以转到页面 /Admin/Catalog/Products/Edit/8 并且它是 GET有效,但是当我尝试使用处理程序进行 AJAX POST 时,我无法让它工作。我有另一个项目,它是 .NET Core Razor 的早期版本,它可以工作。我相信 2.2 中的某些内容发生了变化,这导致了我的问题。

标签: asp.net-core razor asp.net-core-mvc


【解决方案1】:

404 表示网址不正确。

Razor 页面在发送POST 请求时需要设置RequestVerificationToken 标头:

在您的视图中添加@Html.AntiForgeryToken(),然后更改您的ajax,例如:

$.ajax({
            type: 'POST',
            url: 'https://localhost:44349/Admin/Catalog/Products/Edit?handler=Filter',
            contentType: 'application/x-www-form-urlencoded',
            dataType:'json',
            data: {
                 id: 1                  
            },
            headers:
            {
                "RequestVerificationToken": $('input:hidden[name="__RequestVerificationToken"]').val()
            },
            success: function (data) {
                alert("success");
            },
            error: function (xhr, textStatus, error) {
                alert(xhr.statusText);
            }
        });

【讨论】:

  • 谢谢。我发布的代码没有 AntiForgeryToken,因为我在 Startup 中禁用了它。我尝试在标头中添加令牌,但仍然收到 400 错误。还建议将标头名称更改为“XSRF-TOKEN”,但这也不起作用。
  • 您也可以通过 [ValidateAntiForgeryToken(Order = 1000)] learnrazorpages.com/security/request-verification 禁用它
猜你喜欢
  • 2019-09-21
  • 2019-11-22
  • 2018-06-30
  • 2018-07-30
  • 1970-01-01
  • 2019-09-29
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多