Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CORS不';GrantResourceOwnerCredentials引用System.Web.Helpers时无法工作_C#_Asp.net_Asp.net Web Api_Owin_Owin Security - Fatal编程技术网

C# CORS不';GrantResourceOwnerCredentials引用System.Web.Helpers时无法工作

C# CORS不';GrantResourceOwnerCredentials引用System.Web.Helpers时无法工作,c#,asp.net,asp.net-web-api,owin,owin-security,C#,Asp.net,Asp.net Web Api,Owin,Owin Security,我有一个简单的OAuthAuthorizationServerProvider实现(仅用于故障排除),其中我覆盖了GrantResourceOwnerCredentials方法,如下所示: public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.OwinContext.Response.Headers.Add(

我有一个简单的
OAuthAuthorizationServerProvider
实现(仅用于故障排除),其中我覆盖了
GrantResourceOwnerCredentials
方法,如下所示:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
    context.SetError("invalid_grant", "The user name or password is incorrect.");
}
第一行启用CORS,第二行简单地使上下文无效。当使用Chrome进行测试时,这与预期的一样有效-当我发布到令牌端点时,我会返回一个400(错误请求)

但是,当我引入任何对
System.Web.Helpers.Crypto
的引用时,CORS不再工作,我返回请求的资源上不存在“Access Control Allow Origin”标头。例如,如果我将上述更改为此,CORS将失败:

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
        var salt = System.Web.Helpers.Crypto.GenerateSalt();
        context.SetError("invalid_grant", "The user name or password is incorrect.");
    }
当然,这是我在解决问题时提出的一个人为的例子。在实际的GrantResourceOwnerCredentials中,使用了Crypto.VerifyHashedPassword(),这会导致完全相同的问题。另外,作为一个测试,我很快将对Crypto的调用封装在另一个类中,但问题仍然存在

我遇到过奇怪的虫子吗?任何与此相关的指示都将不胜感激


更新:进一步调查表明,任何涉及System.Web.Helpers的人都会出现此问题。换句话说,它并不特定于System.Web.Helpers.Crypto类。

发现在写入“Access Control Allow Origin”头之前发生了异常。单步执行代码并没有显示异常。然而,一旦我使用了@Robert Levy推荐的fiddler,我看到了包含异常的完整响应——“无法加载文件或程序集‘System.Web.Helpers’”。我跟踪到web.config,其中
System.web.Helpers
dependentAssembly
条目的版本号错误:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="2.0.0.0"/>
  </dependentAssembly>


newVersion
设置为
3.0.0.0
,但程序集的版本为
2.0.0.0
。在web.config中进行此更改修复了问题。

哇,如果您的诊断正确,这将是一个非常严重的错误。。。这让我觉得它可能是不正确的:)你能使用诸如fiddler之类的工具来拦截HTTP流量并与我们共享实际通过网络传输的内容吗?感谢使用fiddler的建议,这有助于揭示潜在的问题-出现了一个异常:“无法加载文件或程序集'System.Web.Helpers'或…”现在我只需要找出原因。