【问题标题】:Cannot post JSON to an ASP.NET Core RazorPage handler无法将 JSON 发布到 ASP.NET Core RazorPage 处理程序
【发布时间】:2018-05-26 18:10:38
【问题描述】:

我正在使用 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 请求并将其绑定到我的属性?

【问题讨论】:

  • 有过这个工作吗?

标签: asp.net-core razor-pages


【解决方案1】:

将 urlsearchparams 与 formdata 一起使用。

在这篇文章中你可以找到更多信息How do I post form data with fetch api?

【讨论】:

    【解决方案2】:

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

        [BindProperty, FromBody]
        public BroadcastMessageEditingViewModel BindingInfo { get; set; }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 可能是这样,但这是一个实验,并且已经有一年多了。 Stackoverflow 用于回答问题,而不是重定向到替代方案。
      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 2020-12-27
      • 2019-10-18
      • 1970-01-01
      • 2020-11-25
      • 2020-05-07
      • 2020-06-23
      • 1970-01-01
      相关资源
      最近更新 更多