asp.net - razor 命名处理程序和 BindProperty
问题描述
我正在尝试将 ajax 发布请求发送到剃须刀页面。此剃须刀页面具有 [BindProperty] 的一些公共属性。对于 ajax 请求,我正在尝试使用命名处理程序。
@page "{title}"
[BindProperty]
public BookViewModel BookModel { get; set; }
public IActionResult OnPostMarkdownInput(string title)
{
return new EmptyResult();
}
在客户端,发送空数据(+ /title)以 BadRequest 结束。但是使用绑定 BookModel 的表单发送它是有效的。因此,我怀疑 [BindProperty] 甚至需要为 namedHandler 绑定此属性。但即使删除后问题仍然存在。
如何添加不需要绑定任何属性的 namedHandler?或者为什么在没有数据发送时会收到 BadRequest?
谢谢!
解决方案
Razor Pages 中 AJAX 发起的请求的错误请求响应通常是缺少请求验证令牌的症状,您需要根据您发出的请求类型将其作为表单值或标头包含在内。如果要发布 JSON,则需要添加标头:
$.ajax({
type: "POST",
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
url: "/yourformhandler",
...
否则,您只需要确保隐藏字段包含在发布的值中。
在此处查看有关请求验证的更多信息:https ://www.learnrazorpages.com/security/request-verification
推荐阅读
- java - 如何在java中选择文件输出路径
- c++ - Boost.Log - 日志消息被意外过滤掉
- javascript - 通过json子数组过滤
- django - Django 中的 UnboundLocalError 和 TypeError
- php - 如何计算裁剪图像的位置 - imagecopyresampled
- java - vaadin FileDownloader 重置扩展
- java - Java:在保持顺序的同时并行过滤大型文本文件
- html - 变换比例并调整外部内容
- python - Python goslate 可能的防火墙问题
- jquery - 在 document.ready 上触发一个 jQuery 函数