jquery - 使用防伪 token 将 JSON 模型发布到 ASP.Net MVC3

标签 jquery ajax json asp.net-mvc-3 csrf

所以,我一直在用头撞墙,但找不到任何好的资源。也许我忘记了模型绑定(bind)的东西在 MVC3 中是如何工作的,但这就是我想要做的:我有一个与 Knockout 绑定(bind)的编辑器来处理模型的编辑。该模型没有太多内容:

public class SetupTemplate
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Template { get; set; }
} 

我尝试调用的操作的签名是:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateTemplate(SetupTemplate template)

从这里的另一个问题中,我选择了这个相当有用的片段来获取防伪 token :

window.addAntiForgeryToken = function(data) {
    data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
    return data;
};

我尝试通过 ajax 发布更新:

payload = window.addAntiForgeryToken(ko.mapping.toJS(self.data));
$.ajax({
    type: "post",
    url: endpoint,
    data: payload,
    success: function(data) {
        //Handle success
    }});

这会导致 Chrome 开发者工具的表单数据部分出现这种情况

Id:1
Name:Greeting
Template: [Template Text]
__RequestVerificationToken: [The really long anti-forgery token]

防伪 token 已被拾取,但我的模型为空。我见过的大多数示例都只使用传递的单个参数,而不是模型。

我确信我遗漏了一些明显的东西,有关于它可能是什么的见解吗?

编辑: 为了回应@Mark,将调用更改为:

$.ajax({
type: "post",
dataType: "json",
contentType: 'application/json',
url: endpoint,
data: JSON.stringify(payload),
success: function(data) {
    //Do some stuff
}});

导致请求负载如下:

{"Id":1,"Name":"Greeting","Template":"...","__RequestVerificationToken":"..."}:

并且服务器没有获取防伪 token 。在使用和不使用 $.ajax()contentType 参数的情况下都尝试过此操作。

最佳答案

映射不适用于作为模板的参数,因为它与具有相同名称(轴承箱)的属性之一冲突。如果您使用模板以外的任何内容,它将非常适合该 Controller 参数。

有一个解释详细信息的链接,我现在无法轻松找到该链接。

public class SetupTemplate
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Template { get; set; }
} 

关于jquery - 使用防伪 token 将 JSON 模型发布到 ASP.Net MVC3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190332/

相关文章:

javascript - ajax 请求在 IE 上不起作用

javascript - 显示/隐藏选项卡箭头以在溢出时导航其他选项卡

javascript - .checkboxradio ('refresh' )问题,无法与禁用的预加载字段一起使用

json - 如何在嵌入式系统上用 jsmn 解析一个小的 JSON 文件?

javascript - 如何在 javascript 定时器/循环中运行 php 代码

javascript - 从 JQuery 中的多个表单中选择表单

php - 如何解析发送到 ajax 的 POST 数据?

javascript - 如何对 jquery 选择的插件进行自动完成搜索?

javascript - 如何从 JSON 中的指定键获取值

javascript - Ajax Json解析空白结果