gpt4 book ai didi

.net - 如何使用主干单页应用程序在 MVC4 中测试 AntiForgeryToken

转载 作者:行者123 更新时间:2023-12-02 15:42:49 24 4
gpt4 key购买 nike

我在让 Microsoft 的 MVC 的 [ValidateAntiForgeryToken] 与使用 Marionette & Backbone 编写的单页应用程序 (SPA) 配合使用时遇到问题。问题似乎是 MVC [ValidateAntiForgeryToken] 方法无法看到我们作为 JSON 的一部分发送的 token 。我们认为这是因为 token 必须位于回复的表单部分,但 MrOggy85 说这不是问题(请参阅下面的答案)。

代码位于我的 API Controller 中,它使用 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] 属性提供对防伪 token 的内置支持。目前,此功能尚未内置到 Web API 中。但是,(KnockoutJS) 模板包含一个Web API 的自定义实现。”。这表明他们自己编写,我可以做到。

还有其他人遇到过这个问题吗?如果有,你是如何解决的?我是否遗漏了一些明显的东西,或者我应该编写自己的 ValidateAntiForgeryToken 方法?我们将不胜感激您的意见。

更新

@MrOggy85 提供的很棒的 stackoverflow 链接,其中包含更多信息。请参阅How can i supply an AntiForgeryToken when posting JSON data using $.ajax? 。我计划编写自己的 AntiForgery 测试,并在完成后发布。

最佳答案

当您使用帮助器时@Html.AntiForgeryToken()在 View 中,这是实际的 HTML 结果:

<input name="__RequestVerificationToken" type="hidden" 
value="{ long cryptic code }">

此输入字段通常位于您的 <form> 内-元素,这意味着如果您提交该表单,它将附加到请求中。

当此输入字段位于您的表单之外或者您没有提交表单时,就会出现此问题。不要害怕,有一个解决方案。属性[ValidateAntiForgeryToken]告诉服务器查找名为“__RequestVerificationToken”的 key 。让我们为服务器提供它想要的东西!

首先,获取该值!

var antiforgeytoken = $('input[name=__RequestVerificationToken]').val();

其次,将其附加到您的 AJAX 请求(我使用 jQuery)

$.ajax({
url: 'something/something',
type: 'POST',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', // Default
data: { 'somekey': 'someval',
'__RequestVerificationToken', antiforgeytoken }
});

现在你的服务器很高兴,你也很高兴!

更新:
内容类型很重要,因为 MVC Binder 如何验证请求。如果您想使用其他内容类型,请使用此解决方案 How can i supply an AntiForgeryToken when posting JSON data using $.ajax?建议将防伪 token 和发布数据分开在两个不同的参数中。

关于.net - 如何使用主干单页应用程序在 MVC4 中测试 AntiForgeryToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com