首页 \ 问答 \ 将在运行时通过反射创建的DbSet 传递给Queryable(Passing A DbSet created at runtime via reflection to Queryable)

将在运行时通过反射创建的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
更新时间:2022-08-04 19:08

最满意答案

是的,这被认为是安全的,因为服务器证书的指纹通过可信机制传输到客户端(物理上靠近服务器以通过难以篡改传输机制来接收指纹)。 如果在初始设置之后要尝试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服务器),以及用于证明其 ...
  • @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键并接受默认值即可。 自签名证书不会被任何第三方验证,除非您以前将它们导入浏览器。 如果您需要更多安全性,您应该使用由 ...
  • 是的,这被认为是安全的,因为服务器证书的指纹通过可信机制传输到客户端(物理上靠近服务器以通过难以篡改传输机制来接收指纹)。 如果在初始设置之后要尝试MITM攻击,即使服务器名称相同,也会生成不同的密钥,因此指纹会有所不同,客户端会检测到这一点,并且可以适当地拒绝通信。 还可以认为这种方法更安全,因为客户端不需要信任第三方来验证证书的真实性 。 CA偶尔会发布欺诈性证书 。 Yes, this is considered secure because the fingerprint of the server ...
  • 在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 ...
  • 设置策略标志以包含AllowUnknownCertificateAuthority 。 Set up the policy flags to include AllowUnknownCertificateAuthority.
  • 是的,你的理解是正确的,但它错过了一件事 - 事情会随着时间的推移而改变。 如果披露服务器的私钥或服务器的证书以其他方式变为无效(无论如何),PKI提供证书撤销和撤销检查的机制。 并且使用自签名证书这是不可能的(至少在没有构建自定义PKI基础结构的情况下)。 解决此问题的一种方法是创建一个自定义自签名证书,该证书将用作CA证书。 使用此证书签署服务器证书并将吊销信息放入CA证书。 然后在客户端将CA证书添加为受信任的证书,并根据此CA证书执行服务器证书的验证,并检查吊销。 这意味着您必须在某些(可能是私有的 ...
  • IIS试图与客户端“协商”相互信任的连接,并且由于客户端证书是自签名的,它拒绝信任它。 您的选择: 使用由众所周知的证书颁发机构颁发的证书。 这可行,但你必须每年重新颁发证书。 运行您自己的CA基础结构,将其根CA证书添加到服务计算机的“受信任根”证书存储中,并颁发使用该根签名的证书(可能通过中间证书)。 将自签名证书添加到服务计算机的“受信任根”中。 这可能会导致微妙但严重的安全风险 。 我个人反对这个选择,因为它感觉真的不安全。 切换到其他不使用客户端证书的身份验证方案。 IIS tries to "n ...
  • 之前我遇到过同样的问题,请使用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 ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)