【发布时间】:2019-05-19 08:08:14
【问题描述】:
我正在尝试从 iframe 发布表单。但是我收到 400 错误,我不知道为什么。在 iframe 中,它显示了 GET 请求,我还在 GET 和 POST 方法标头中设置了"X-Frame-Options", "ALLOW-FROM ...。
这是请求:
Host: localhost:52136
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:52136/
Content-Type: application/x-www-form-urlencoded
Content-Length: 796
Connection: keep-alive
Upgrade-Insecure-Requests: 1
然后回应:
HTTP/1.1 400 Bad Request
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcR2VydmlsIERvdWJhbFxzb3VyY2VccmVwb3NcQWNvbXBhIGNoYXJ0XE9ubGluZUFnZW5jeQ==?=
X-Powered-By: ASP.NET
Date: Tue, 18 Dec 2018 20:41:55 GMT
Content-Length: 0
当我直接从浏览器中的同一个 url 提交同一个表单时,我没有收到任何错误。
如何在 iframe 中修复它?
【问题讨论】:
-
这听起来可能是 CSRF 缓解问题。
-
我该如何解决?
-
首先要做的是确认这是否是问题所在。您可以使用here 的建议暂时禁用 CSRF 检查。
-
我刚刚将 [IgnoreAntiforgeryToken(Order = 1001)] 设置为我的 pageModel 并且它重定向得很好。但我曾经在 tempdata 中存储一些数据。但是在重定向之后,临时数据没有像直接提交表单时那样的任何数据。
-
我不知道它如何与 iframe 一起工作的具体细节,但是当您从 iframe 内部发出请求时,似乎没有发送 cookie。希望这至少能让你有所了解。