繁体   English   中英

无法将JSON发布到ASP.NET Core RazorPage处理程序

[英]Cannot post JSON to an ASP.NET Core RazorPage handler

我正在使用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请求并将其绑定到我的媒体资源?

将urlsearchparams与formdata一起使用。

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

通过添加FromBody类似于ASP.NET Web API 2的工作原理),我可以使Binding工作正常。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM