首页 > 解决方案 > 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?

谢谢!

标签: asp.netrazorasp.net-coreasp.net-core-2.1razor-pages

解决方案


Razor Pages 中 AJAX 发起的请求的错误请求响应通常是缺少请求验证令牌的症状,您需要根据您发出的请求类型将其作为表单值或标头包含在内。如果要发布 JSON,则需要添加标头:

$.ajax({
    type: "POST",
    headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
    url: "/yourformhandler",
    ...

否则,您只需要确保隐藏字段包含在发布的值中。

在此处查看有关请求验证的更多信息:https ://www.learnrazorpages.com/security/request-verification


推荐阅读