我有一个WebApi服务已经工作了很长时间,但突然之间,它正在响应所需的防伪cookie“__RequestVerificationToken”不存在
此服务以前从未要求过这种服务,并且自从它工作以来唯一改变的是一个新的“HttpPost”功能被添加到控制器中并且有几个被删除了。我尝试过的事情:
在我的startup.cs中,我有:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
评论该行,但没有变化。
删除项目中对CORS DLL的所有引用,理论上无法抛出此错误?
使用[DisableCors]装饰我的方法不起作用,但无法识别。
重新启动服务器
IIS设置中的任何内容似乎都不会影响这一点。
在调用服务的web.config中没有任何关于CORS的信息,或者错误信息。没有“requireSSL”或类似的东西,只是一个连接字符串和一些系统库。
这是从本地计算机调用的本地服务,在完整版本的IIS 7.5中运行。没有报告其他错误,并且以相同方式托管的类似服务不会引发此错误。
我对如何从请求中发布cookie不感兴趣,我需要关闭导致接收服务的任何内容。
答案 0 :(得分:1)
如果您从MVC项目调用API,请尝试一下。它告诉API不要查找cookie,而是通过令牌使用传递的声明中的名称。您不需要传递令牌(尽管您应该),这只是告诉API不要查找cookie。
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
//let mvc know you are using a token and not a cookie like it expects
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
}
答案 1 :(得分:0)
好的,问题是这从来就不应该是跨站点请求。我在问题中不清楚这一点,但这些服务都与调用者在同一个域上运行。所以,这应该是我的第一个线索 - 这不是跨站点请求,但服务认为它是。这导致我检查应用程序池中的IIS设置,并且看,一个服务指向错误的站点!它是在正确的应用程序池中,但它生活在一个不同的站点。修复它与调用者在同一站点中运行使其不是跨站点请求,并且不会发生此错误,并且它不需要任何令牌或cookie或其中任何一个。