【发布时间】:2013-07-27 17:49:55
【问题描述】:
我无法让 Microsoft 的 MVC 的 [ValidateAntiForgeryToken] 与使用 Marionette & Backbone 编写的单页应用程序 (SPA) 一起工作。问题似乎是 MVC [ValidateAntiForgeryToken] 方法无法看到我们作为 JSON 的一部分发送的令牌。我们认为这是因为令牌必须在回复的表单部分中,但 MrOggy85 说这不是问题(请参阅下面的答案)。
代码在我的 api 控制器中,它使用 AttributeRouting,我们认为这是导致问题的原因。一个典型的动作如下所示:
// POST api/vizschemes/
[POST("")]
[Authorize(Roles = "...some role...")]
[ValidateAntiForgeryToken]
public ActionResult Add(CreateUpdateSmVizSchemeDto dto, ICreateSmVizScheme service)
{
... code to update the VizScheme and return json
}
还有其他人克服过这个吗?很多谷歌搜索出现了post中的评论“ASP.NET MVC 通过 AntiForgery 类和 [ValidateAntiForgeryToken] 属性提供了对防伪令牌的内置支持。目前,此功能尚未构建到 Web API。但是,(KnockoutJS) 模板包含 Web API 的自定义实现。"。这表明他们自己编写,我可以做到。
有没有其他人遇到过这个问题,如果有,您是如何解决的?我是否遗漏了一些明显的东西,还是应该只编写自己的 ValidateAntiForgeryToken 方法?您的意见将不胜感激。
更新
@MrOggy85 提供的很棒的 stackoverflow 链接,其中包含更多信息。见How can i supply an AntiForgeryToken when posting JSON data using $.ajax?。我计划编写自己的 AntiForgery 测试,完成后会发布。
【问题讨论】:
标签: .net asp.net-mvc-4 backbone.js single-page-application attributerouting