4

我正在使用 ASP.NET Core RazorPage 作为 MVC 控制器的替代方案,并且我希望能够通过 XMLHttpRequest 提交客户端表单。我已经弄清楚了 XSRF 令牌位,以便通过集合,但 RazorPages 框架似乎没有处理入站 JSON 有效负载并将其绑定到预期的属性。

一些代码:

页面的模型(.cshtml.cs):

public class IndexModel : PageModel
{
    private Database database;
    private ILogger logger;

    [BindProperty]
    public AddRequestModel MyRequest { get; set; }

    public IndexModel(Database database, ILogger<IndexModel> logger)
    {
        this.database = database;
        this.logger = logger;
    }

    public void OnGet() {}

    public IActionResult OnPostValidate()
    {
        if (ModelState.IsValid)
        {
            // ...
        }

        return new BadRequestObjectResult(ModelState);
    }

    public async Task<IActionResult> OnPutConfirmAsync()
    {
        // ...
    }
}

和客户端帖子:

const url = "?handler=validate";
const data = { MyRequest: this.fields };
await axios.post(url, data);

我已验证数据已正确提交:

在此处输入图像描述

在提交请求之前,axios 正在添加 X-XSRF-TOKEN 标头。服务器以错误列表响应的事实表明它不是导致问题的 XSRF 令牌:

在此处输入图像描述

请注意,MyRequest 对象不包含请求负载中的值 - 它没有按预期绑定(否则 FirstName 不会返回所需的错误)。如何告诉 RazorPages 接受 JSON 请求并将其绑定到我的属性?

4

3 回答 3

0

将 urlsearchparams 与 formdata 一起使用。

在这篇文章中,您可以找到更多信息如何使用 fetch api 发布表单数据?

于 2019-03-21T20:58:22.213 回答
0

FromBody通过添加类似于 ASP.NET Web API 2 的工作方式,我能够获得绑定工作。

    [BindProperty, FromBody]
    public BroadcastMessageEditingViewModel BindingInfo { get; set; }
于 2019-08-31T21:47:44.670 回答
-2

您最好将数据发布到 API 端点而不是页面控制器。从 ControllerBase 创建一个类,它将正确处理您的 JSON 帖子。

于 2019-01-18T04:37:03.883 回答