我在标题中放置了错误消息,因为我对网络进行了评分,但找不到其他任何有此问题的实例。
我正在尝试使用google .net api访问分析数据,如下所示:http://www.toplinestrategies.com/dotneters/net/accessing-and-querying-google-analytics-via-service-account-c/?lang=en
我已经按照所有内容创建了凭据,指向了密钥文件和密码,并使用电子邮件地址作为客户端ID。
但奇怪的是,当我执行页面时,它立即失败并且标题中出现错误。
有问题的代码行似乎是这一行:
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(clientId)
{
Scopes = new[] { scope }
}.FromCertificate(certificate));
如果我删除该行,页面不会导致异常,但如果我添加它,它会立即失败。
但它完全跳过该页面上的任何断点,所以我甚至无法查看错误的内容或位置,就好像它在页面加载之前执行一样。
我怀疑这是不好的凭据,但如果我运行小提琴手,我发现没有流量传递到谷歌或任何地方,它只是立即失败。
这是非常令人沮丧的,有没有人见过这个?什么想法可能是错的?真正让我感到愤怒的部分是,如果我在页面的任何地方设置断点,即使在失败的代码之前,它也没有命中,但是立即失败,跳过我的所有断点,怎么会这样?
密钥的路径是正确的,密码是正确的,电子邮件客户端ID是正确的我三重检查它,这也不是问题,因为它甚至从未尝试联系谷歌。
我想也许这是对密钥的读/文权限,但我完全访问了文件中的每个人,并且X509Certificate2正确加载...
那么其他什么可能在这里错了?
感谢
答案 0 :(得分:2)
事实证明,令人讨厌的代码行是web.config中的这一行:
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
bin文件夹中的System.Net.Http版本实际上是2.1.10。不知道为什么这不会导致整个网站崩溃而不是一个随机组件,但删除它完全解决了问题