无法将 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”后缀错误的文件