将在运行时通过反射创建的DbSet 传递给Queryable(Passing A DbSet created at runtime via reflection to Queryable)
我正在尝试执行动态linq查询,其中我的DbSet类型是在运行时通过反射创建的我得到错误:
“最好的重载方法匹配'System.Linq.Queryable.Where(System.Linq.IQueryable,System.Linq.Expressions.Expression>)'有一些无效的参数”
这是我的代码
MyDataContext db = new MyDataContext (); var dbType = db.GetType(); var dbSet = dbType.GetProperty("MyType").GetValue(db,null); dbSet.GetType().InvokeMember("Local", BindingFlags.GetProperty, null, dbSet , null) //just to show that it equal dbSet.Equals(db.MyType); //returns true; //here i create a dynamic expression tree dynamic l = Expression.Lambda(delagateType, greater, param); //here it fails when i pass in my dbSet var but not when i pass db.MyType dynamic q = ((IEnumerable<object>)Queryable.Where(dbSet , l)).ToList();
I'm trying to execute a dynamic linq query where my DbSet Type is created at runtime via reflection an I'm getting the error:
"The best overloaded method match for 'System.Linq.Queryable.Where(System.Linq.IQueryable, System.Linq.Expressions.Expression>)' has some invalid arguments"
Here's my code
MyDataContext db = new MyDataContext (); var dbType = db.GetType(); var dbSet = dbType.GetProperty("MyType").GetValue(db,null); dbSet.GetType().InvokeMember("Local", BindingFlags.GetProperty, null, dbSet , null) //just to show that it equal dbSet.Equals(db.MyType); //returns true; //here i create a dynamic expression tree dynamic l = Expression.Lambda(delagateType, greater, param); //here it fails when i pass in my dbSet var but not when i pass db.MyType dynamic q = ((IEnumerable<object>)Queryable.Where(dbSet , l)).ToList();
原文:https://stackoverflow.com/questions/35894273
最满意答案
是的,这被认为是安全的,因为服务器证书的指纹通过可信机制传输到客户端(物理上靠近服务器以通过难以篡改传输机制来接收指纹)。 如果在初始设置之后要尝试MITM攻击,即使服务器名称相同,也会生成不同的密钥,因此指纹会有所不同,客户端会检测到这一点,并且可以适当地拒绝通信。
还可以认为这种方法更安全,因为客户端不需要信任第三方来验证证书的真实性 。 CA偶尔会发布欺诈性证书 。
Yes, this is considered secure because the fingerprint of the server's certificate is transferred to the client via a trusted mechanism (being physically next to the server to receive the fingerprint via a difficult to tamper with transport mechanism). If a MITM attack were to be attempted after the initial setup, even though server name would be the same, different keys would have been generated so the fingerprint would be different and the client would detect this and can appropriately reject the communication.
It could also be argued that this method is more secure because the client does not need to trust a 3rd party to verify the authenticity of the certificate. CAs do occasionally issue fraudulent certificates.
相关问答
更多-
证书的目的是以您可以验证的方式声明一条信息。 公钥证书,更具体地说是此上下文中的X.509证书,断言公钥,标识符(主题专有名称和/或主题备用名称)与各种其他属性之间的绑定。 总而言之,这些信息被签名以形成证书。 X.509证书同时具有发行者和主题。 主题是表示该证书识别的人员或内容的标识符(以及拥有与该证书中的公钥匹配的私钥的人员或内容)。 发行者表示使用其私钥对此证书进行签名的个人或组织的标识符。 证书使用可以大致分为两类:用于特定应用程序或服务的证书(例如,验证SSL / TLS服务器),以及用于证明其 ...
-
使用.NET的HttpWebRequest / Response自签名证书(Using a self-signed certificate with .NET's HttpWebRequest/Response)[2022-06-06]
@Domster:这有效,但是您可能希望通过检查证书哈希匹配您期望的内容来强制执行一些安全性。 所以扩展版本看起来有点像这样(根据我们使用的一些实时代码): static readonly byte[] apiCertHash = { 0xZZ, 0xYY, ....}; ////// Somewhere in your application's startup/init sequence... /// void InitPhase() { // Ov ... -
您可以在一个命令中执行此操作: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 如果您不想用密码保护您的私人密钥,您还可以添加-nodes ,否则将提示您输入“至少4个字符”密码。 days参数(365)可以替换任何数字来影响到期日。 它会提示您输入“国家/地区名称”,但您只需按Enter键并接受默认值即可。 自签名证书不会被任何第三方验证,除非您以前将它们导入浏览器。 如果您需要更多安全性,您应该使用由 ...
-
根据指纹检查自签名证书是否安全?(Is it secure to check a self-signed certificate based on it's fingerprint?)[2023-12-15]
是的,这被认为是安全的,因为服务器证书的指纹通过可信机制传输到客户端(物理上靠近服务器以通过难以篡改传输机制来接收指纹)。 如果在初始设置之后要尝试MITM攻击,即使服务器名称相同,也会生成不同的密钥,因此指纹会有所不同,客户端会检测到这一点,并且可以适当地拒绝通信。 还可以认为这种方法更安全,因为客户端不需要信任第三方来验证证书的真实性 。 CA偶尔会发布欺诈性证书 。 Yes, this is considered secure because the fingerprint of the server ... -
iOS上的自签名证书(Self-signed certificates on iOS)[2023-01-30]
在iOS上使用Cordova时,如果要使用自签名证书,则必须将此代码添加到应用程序中。 @implementation NSURLRequest(DataController) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; } @end 所以这可能意味着什么 原因是接受自签名证书会绕过证书链验证,这允许设备认为任何服务器证书有效。 与Android不同,这是全有或全无的,一旦你添加所有的验证都被跳过。 添加它只 ... -
SelfSigned CA必须位于服务器上以及连接到服务器的任何客户端上的LocalMachine \ Root存储中。 SSL证书应具有客户端将用于连接到它的确切DNS名称。 它可以在主题备用名称(SAN)扩展中的证书中指定多个DNS名称。 在您的情况下,您正在使用IP地址 您将IP地址放在SAN或 您将IP地址放在hosts文件中,并使用您在发出SSL证书时指定的DNS名称,并在HttpClient中使用此DNS名称 您可以考虑使用XCA颁发证书。 它有很好的GUI,建立在OpenSSL之上。 它具有C ...
-
使用自签名证书(Using self-signed certificates)[2022-04-18]
设置策略标志以包含AllowUnknownCertificateAuthority 。 Set up the policy flags to include AllowUnknownCertificateAuthority. -
是的,你的理解是正确的,但它错过了一件事 - 事情会随着时间的推移而改变。 如果披露服务器的私钥或服务器的证书以其他方式变为无效(无论如何),PKI提供证书撤销和撤销检查的机制。 并且使用自签名证书这是不可能的(至少在没有构建自定义PKI基础结构的情况下)。 解决此问题的一种方法是创建一个自定义自签名证书,该证书将用作CA证书。 使用此证书签署服务器证书并将吊销信息放入CA证书。 然后在客户端将CA证书添加为受信任的证书,并根据此CA证书执行服务器证书的验证,并检查吊销。 这意味着您必须在某些(可能是私有的 ...
-
IIS试图与客户端“协商”相互信任的连接,并且由于客户端证书是自签名的,它拒绝信任它。 您的选择: 使用由众所周知的证书颁发机构颁发的证书。 这可行,但你必须每年重新颁发证书。 运行您自己的CA基础结构,将其根CA证书添加到服务计算机的“受信任根”证书存储中,并颁发使用该根签名的证书(可能通过中间证书)。 将自签名证书添加到服务计算机的“受信任根”中。 这可能会导致微妙但严重的安全风险 。 我个人反对这个选择,因为它感觉真的不安全。 切换到其他不使用客户端证书的身份验证方案。 IIS tries to "n ...
-
由Intermediate签名的证书显示为自签名证书(Certificate signed by Intermediate shows as self-signed certificate)[2022-11-21]
之前我遇到过同样的问题,请使用ssl_certificate文件中的证书顺序。 您需要在此文件中包含所有中间CA证书,并按正确的顺序排列。 我所要做的就是颠倒该文件中证书的顺序,我的问题就解决了。 您的服务器证书应该在顶部,然后只需沿着CA链。 PS。 我的配置如下: listen 443 default ssl; ssl_certificate /etc/nginx/ssl/server_plus.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ss ...