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

Posted

技术标签:

【中文标题】无法将 JSON 发布到 ASP.NET Core RazorPage 处理程序【英文标题】:Cannot post JSON to an ASP.NET Core RazorPage handler 【发布时间】: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 请求并将其绑定到我的属性?

【问题讨论】:

有过这个工作吗? 【参考方案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 帖子。

【讨论】:

可能是这样,但这是一个实验,并且已经有一年多了。 *** 用于回答问题,而不是重定向到替代方案。

以上是关于无法将 JSON 发布到 ASP.NET Core RazorPage 处理程序的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.0 [FromBody] 字符串内容返回“无法将 JSON 值转换为 System.String。”

将复杂的 JSON 发布到 ASP.NET Core 控制器

在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据

如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?

将 ASP.NET Core 部署到 AWS Elastic Beanstalk,必须包含带有“.runtimeconfig.json”后缀错误的文件

ASP.NET Core MVC - 将 HTML 表转换为 json 并使用 ajax 发送到控制器