我在让 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
}
有没有其他人克服过这个?很多谷歌搜索发现了帖子中的评论“ ASP.NET MVC 通过 AntiForgery 类和 [ValidateAntiForgeryToken] 属性提供了对防伪令牌的内置支持。目前,此功能未内置在 Web API 中。但是, (KnockoutJS) 模板包括 Web API 的自定义实现。 ”。这表明他们自己编写,我可以做到。
有没有其他人遇到过这个问题,如果是这样,您是如何解决的?我是否遗漏了一些明显的东西,还是应该只编写自己的 ValidateAntiForgeryToken 方法?您的意见将不胜感激。
更新
@MrOggy85 提供的很棒的 stackoverflow 链接,其中包含更多信息。请参阅使用 $.ajax 发布 JSON 数据时如何提供 AntiForgeryToken?. 我计划编写自己的 AntiForgery 测试,并在完成后发布。