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

2024-04-03

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

代码位于我的 api 控制器中,它使用属性路由 http://attributerouting.net/,我们假设这是导致问题的原因。一个典型的动作如下所示:

    // 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 http://www.asp.net/single-page-application/overview/introduction/knockoutjs-template "ASP.NET MVC 通过 AntiForgery 类和 [ValidateAntiForgeryToken] 属性提供对防伪令牌的内置支持。目前,此功能尚未内置到 Web API 中。但是,(KnockoutJS) 模板包含 Web API 的自定义实现。”。这表明他们自己写,我可以做到。

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

UPDATE

@MrOggy85 提供的很棒的 stackoverflow 链接,其中包含更多信息。看使用 $.ajax 发布 JSON 数据时如何提供 AntiForgeryToken? https://stackoverflow.com/questions/2906754/how-can-i-supply-an-antiforgerytoken-when-posting-json-data-using-ajax。我计划编写自己的 AntiForgery 测试,并在完成后发布。


当你使用助手时@Html.AntiForgeryToken()在视图中,这是实际的 HTML 结果:

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

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

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

首先,获取该值!

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 }
});

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

Update:
The 内容类型很重要,因为 MVC Binder 如何验证请求。如果您想使用其他内容类型,请使用此解决方案使用 $.ajax 发布 JSON 数据时如何提供 AntiForgeryToken? https://stackoverflow.com/questions/2906754/how-can-i-supply-an-antiforgerytoken-when-posting-json-data-using-ajax建议将防伪令牌和后数据分开在两个不同的参数中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用主干单页应用程序在 MVC4 中测试 AntiForgeryToken 的相关文章

  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 当用户尝试打开新实例时返回到已打开的应用程序

    这是我有一段时间想不通的问题 防止第二个实例很简单并且有很多方法 但是恢复已经运行的进程则不然 我想 最小化 撤消最小化并将正在运行的实例置于最前面 在其他窗口后面 将应用程序置于最前面 我使用的语言是 VB NET 和 C 我发现这段代码
  • PhotoChooserTask 抛出未处理的异常

    我已经有了这段代码 我使用它来显示一个按钮 该按钮允许用户从他的库中选择图像并将其用作我的应用程序的背景 所以我创建了一个PhotoChooserTask 将其设置为显示相机并将其绑定到任务完成时必须执行的方法 该按钮将通过显示PhotoC
  • RegularExpressionValidator 限制输入长度而不限制字符类型

    我正在尝试使用RegularExpressionValidator验证一个TextBox输入长度 我可以使用它 但它只接受字母和数字 我想允许any个字符 唯一的检查是不超过 25 个字符
  • .NET Core 3 [JsonIgnore] 请求单个资源时不起作用

    在我的 net Core 3 0 API 中 JsonIgnore 属性无法正常工作 我在用着System Text Json 而不是旧的Newtonsoft Json 当我使用返回对象列表的资源时 例如 api Object 对象的序列化
  • 在 .NET 并发线程之间传递数据的最佳方式是什么?

    我有两个线程 一个需要轮询一堆单独的静态资源以查找更新 另一种需要获取数据并将其存储在数据库中 线程1如何告诉线程2有东西要处理 如果数据块是独立的 则将数据块视为要由线程池处理的工作项 使用线程池和QueueUserWorkItem将数据
  • DLL 中的 GUID (.Net)

    我在这方面不是很有经验 所以我有几个问题 首先 所有 Net 创建的 DLL 是否都有自己的 GUID 如果没有 我的问题是如何获得一个并将其与 DLL 关联 那么问题是 我如何获得该 dll 的 GUID 即 给定 DLL 路径 c so
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 在 Windows CE 6.0 与 Windows Mobile 6.1 下进行开发的权衡是什么

    我有一个 Windows NET 应用程序 我计划将其 移植 并定制为移动设备 该应用程序由一个独立的 NET 程序组成 该程序与条形码扫描仪配合使用 具有简单的 UI 并将扫描结果记录到文件中 还有一个 Windows 服务 可以使用 W
  • rabbitmq 的 REST API

    有没有办法从 ajax 向 RabbitMQ 发送数据 我的应用程序由数千个 Web 客户端 用 js 编写 和 WCF REST 服务组成 现在我试图弄清楚如何为我的应用程序创建可扩展点 这个想法是有一个rabbitmq实例 它从放置在一
  • 在同一进程中混合 .NET 3.5 与 4/4.5 程序集

    我想将基于 NET 3 5 WinForms 的应用程序迁移到最新的 NET 版本 4 5 该应用程序使用当前也基于 NET 3 5 的 外部 组件 可以视为插件 我想知道我们转换时使用哪些运行时 核心库仅应用程序使用 NET 4 5 进行
  • 适合 .Net 开发人员的 Grails/Roo

    我目前正在学习 Grails 和 Roo 绝大多数培训材料都是针对新开发人员或现有 Java 开发人员 有谁知道使用 Net C ASP Net Asp Net MVC 翻译现有开发经验的任何指南 资源或技巧 你做过很多 ASP MVC 吗
  • xmlns 元素的顺序重要吗

    我不知道如何在 google 中搜索此内容 但是 xmlns 元素的问题在 XML 文件中重要吗 我正在 ASP NET VB 中使用 XMLWriter 创建一个 XML 文件 并且尝试匹配我提供的示例
  • 如何在 TeamCity 的 .NET 项目中包含解决方案目录之外的依赖项

    我的解决方案目录之外有类库 因此我在 sln 文件 SomeDependency csproj 中有这样的引用 在 VS 中一切正常 但在尝试构建我的解决方案时 TeamCity 失败了 我猜它复制了所有解决方案目录 因此关系不再存在 这是
  • Backbone Collection 和 Marionette CompositeView 中未定义的模型原型

    尝试从值列表填充集合时 我收到有关集合的错误model s prototype未定义 看着这个问题是关于类似问题的 https stackoverflow com q 16126195 1663942 我已经检查过模型确实已创建before
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 我的 C# .NET 团队是否应该迁移到 Windows Presentation Foundation? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • Flink 检查点到 Google Cloud Storage

    我正在尝试为 GCS 中的 flink 作业配置检查点 如果我在本地运行测试作业 没有 docker 和任何集群设置 一切正常 但如果我使用 docker compose 或集群设置运行它并在 flink 仪表板中使用作业部署 fat ja
  • Android 中的文本转语音完成后立即播放音频文件

    我正在尝试开发一个 Android 应用程序 一旦文本到语音完成 就必须播放音频文件 这个怎么做 如果我没有理解错的话 您想使用文本转语音来读取一些文本 同时将语音音频存储到手机中 然后再播放音频 你检查过吗录音测试 http develo
  • Mesos 任务 - 无法接受套接字:未来已丢弃

    我只是想将 mesos 版本从 1 0 3 升级到 1 3 1 Chronos 调度程序能够通过 mesos 调度作业 该作业运行良好并且能够查看 mesos 标准输出日志 但是 仍然在 mesos stderr 日志中看到以下内容 doc
  • 使用 MySQL 进行 SVN 身份验证

    我正在尝试通过 MySQL 设置每个存储库 SVN 身份验证 但遇到一些问题 首先 两者有什么区别mod authn dbd and mod auth mysql 其次 我已经有一个 MySQL 数据库设置 其中包含用户 组和权限的表 是否
  • 如何从 Amplify 生成的 Lambda 函数中访问其他 AWS 资源?

    我一直在使用 AWS Amplify 作为 AWS 的新手 我非常喜欢 Amplify 如何在 AWS 上为我配置必要的资源和 IAM 角色 我的问题是关于将 Lambda 与 GraphQL 结合使用 按照文档 我可以创建一个自定义 Gr
  • 可以使用反射覆盖 IEnumerable 中的项目吗?

    不顾任何合理的理由这样做 只是出于好奇是否可以获取任何给定的 IEnumerable T 并覆盖其中包含的项目 例如 给定 IEnuemrable String 是否可以完全替换 IEnumerable 中的所有字符串 正如其他人所说 如果
  • 背景尺寸:包含

    我想要一个带有背景图像的 div 保持图像的纵横比 固定高度为 500px 并且我不希望该 div 的背景上有 填充 这可以吗 我可以获得一个具有固定高度和保持宽高比的背景图像的 div div style background url s
  • 如何使用 Google 字体更改 Bootstrap 默认字体系列?

    我正在创建一个博客网站 我想更改 Bootstrap 字体 在 header 中的 import CSS 中我添加了这个字体 如何使用它作为我的引导程序默认字体 首先 你不能通过这种方式将字体导入到 CSS 中 您可以在 HTML 头中添加
  • Swift 中的元组是否可以完全替代 C# 中的匿名类型

    Like C 中的匿名类型 http msdn microsoft com en us library bb397696 aspx 新推出的语言 Swift 中的元组可以做 C 中的匿名类型可以做的事情吗 在学习 swift 时 我发现了一
  • 如何打开图像并在其上绘图

    我正在创建一个应用程序 人们可以在其中绘制草图并保存到图库中 这我已经完成并且运行良好 我希望能够从画廊中获取一张图像并能够在其上进行绘制 我已经能够打开图库来选择图像 但我无法弄清楚如何将该图像嵌入到画布上然后进行绘制 但问题是 它打开了
  • 存储过程返回 int 而不是结果集

    我有一个包含动态选择的存储过程 像这样的事情 ALTER PROCEDURE dbo usp GetTestRecords p1 int 0 p2 int 0 groupId nvarchar 10 0 AS BEGIN SET NOCOU
  • ES6 类中的 ES6 函数、箭头函数和“this”[重复]

    这个问题在这里已经有答案了 class App extends Component constructor props onChange e gt this setState term e target value onSubmit e e
  • CouchDB 和 Couchbase 有什么区别?

    之间有什么本质区别吗CouchDB http couchdb apache org and 沙发底座 http www couchbase com 我认为CouchDB和Couchbase Server之间有一些本质的区别需要指出 我不会写
  • 在自定义大小的浏览器窗口中使用批处理文件打开链接

    我想创建一个批处理文件 它将打开一个应用程序和一个链接 我们的想法是在桌面上的快捷方式文件中使用此批处理文件 以便一键单击应用程序和 URL 链接示例 www google com 应打开 但浏览器大小应自定义 例如 600 600 请建议
  • Spark中saveAsTextFile时如何命名文件?

    在 Spark 版本 1 5 1 中另存为文本文件时 我使用 rdd saveAsTextFile
  • 使用Robolectric时如何加载.so?

    W 环境 EXTERNAL STORAGE 未定义 回到默认状态 java lang UnsatisfiedLinkError com autonavi amap mapcore MapCore nativeNewInstance Ljav
  • 使表格行的背景延伸到表格边界之外

    我目前正在尝试创建一个带有斑马条纹的表格 其中条纹的背景颜色延伸到屏幕的整个长度 但行的实际内容保留在表格的边界内 更具体地说 我正在使用 Bootstrap 所以我想要的是表行的内容就像它们位于 container 本质上 我正在尝试创建
  • ASP.Net MVC 显示格式

    在我的模型中 我的属性之一有以下 DataAnnotations Required ErrorMessage DisplayFormat DataFormatString 0 d DataType DataType Date public
  • ant/Jenkins:move不支持“安静”属性

    我的构建脚本执行
  • 如何使用主干单页应用程序在 MVC4 中测试 AntiForgeryToken

    我在获取 Microsoft 的 MVC 时遇到问题 ValidateAntiForgeryToken 使用使用 Marionette Backbone 编写的单页应用程序 SPA 问题似乎是MVC ValidateAntiForgeryT