考虑以下代码:
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadOnly);
foreach (var certificate in store.Certificates)
{
if (!string.IsNullOrWhiteSpace(certificate?.SubjectName?.Name)
&& certificate.SubjectName.Name.StartsWith("CN=*.mysite.com"))
{
return certificate;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以清楚地遍历证书,但为什么我不能枚举它们。为什么下面的代码会抛出编译错误?
var cert = store.Certificates.FirstOrDefault(x =>
string.IsNullOrWhiteSpace(x?.SubjectName?.Name) &&
x.SubjectName.Name.StartsWith("CN=*.mysite.com"));
Run Code Online (Sandbox Code Playgroud)
错误 CS1061“X509Certificate2Collection”不包含“FirstOrDefault”的定义,并且找不到接受“X509Certificate2Collection”类型的第一个参数的可访问扩展方法“FirstOrDefault”(您是否缺少 using 指令或程序集引用?)
您应该投射它才能使用它:
store.Certificates.OfType<X509Certificate2>().FirstOrDefault(x =>
string.IsNullOrWhiteSpace(x?.SubjectName?.Name) &&
x.SubjectName.Name.StartsWith("CN=*.mysite.com"));
Run Code Online (Sandbox Code Playgroud)
store.Certificates.Cast<X509Certificate2>()
会给你一个IEnumerable<X509Certificate2>
你需要的。
归档时间: |
|
查看次数: |
1055 次 |
最近记录: |