ASP.NET Core Web - 所需的防伪cookie“.AspNetCore.Antiforgery.wRFSYju6cwY”不存在

时间:2018-04-12 07:55:01

标签: c# asp.net-core asp.net-core-2.0

我在VS 2017(社区v15.6.6)中创建了一个新的ASP.NET Core 2.0 Web应用程序项目,在新项目向导中,我选择了Web应用程序+身份验证:个人用户帐户。 我在PM中运行了Update-Database来创建db。 然后我在IIS Express中运行VS中的应用程序,我注册了一个新用户并登录。一切正常。

然后我停止了应用程序并在IIS Express中运行它,但我使用了在launchSettings.json中配置的第二个启动配置文件:

"profiles": {
"TestCoreWebApp": {
  "commandName": "Project",
  "launchBrowser": true,
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  },
  "applicationUrl": "http://localhost:63090/"
}

启动应用程序并使用主页打开Web浏览器。 现在,当我尝试登录时,它不起作用。它以http 400错误结束。

在输出中,我看到以下错误:

    Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The required antiforgery cookie ".AspNetCore.Antiforgery.wRFSYju6cwY" is not present.
   at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.<ValidateRequestAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.<OnAuthorizationAsync>d__3.MoveNext()

任何人都可以解释为什么它与IIS Express配置文件中的工作方式不同?这是一个错误吗?

IIS Express配置文件在HTTPS上运行,但另一个配置文件在HTTP上运行。这种差异是否会在所描述的行为中起作用?

非常感谢。 菲利普

4 个答案:

答案 0 :(得分:0)

我也在同一个版本中创建了相同的项目但是我没有创建数据库,因为当您添加新用户时,实体框架会检查并创建数据库

尝试创建新用户,最近EF创建数据库。

答案 1 :(得分:0)

使用带有ASP Net Core 2.0的Identity Server 4 /身份管理项目和带有ASP并运行IIS的Asp Net Core 2.0 API项目时,我遇到了类似的问题。

对于开发环境,我更改为不使用SSL并使用Kestrel的情况下运行,并显示错误“必需的防伪cookie .AspNetCore.Antiforgery.wRFSYju6cwY”。

当我在所有浏览器中清理Cookies时,一切都开始正常运行,希望对您有所帮助。

答案 2 :(得分:0)

尝试将@Html.AntiForgeryToken()插入到登录视图(在表单内)。

答案 3 :(得分:0)

这使我绊倒了很多次,因为我通常从一个空的Web项目模板开始。

您可能会丢失fragment("?->'google_place_ids' @> ?", b.metadata, ^"[\"#{google_place_id}\"]") 文件或其中的以下行(这将启用内置标签帮助程序,即自动注入的csrf):

_ViewImports.cshtml