小编Mat*_*zer的帖子

C#Reflection - 从一个简单的类中获取字段值

我有一节课:

class A {
    public string a = "A-val" , b = "B-val";
}
Run Code Online (Sandbox Code Playgroud)

我想通过反射打印对象成员

//Object here is necessary.
Object data = new A();
FieldInfo[] fields = data.GetType().GetFields();
String str = "";
foreach(FieldInfo f in fields){
    str += f.Name + " = " + f.GetValue(data) + "\r\n";
}
Run Code Online (Sandbox Code Playgroud)

这是期望的结果:

a = A-val
b = B-val
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.请帮忙,谢谢.

c# reflection

37
推荐指数
1
解决办法
7万
查看次数

如何从匿名委托或lambda访问安全关键字段?

脚本

假设我们有下一个代码:

[SecuritySafeCritical]
public void SomeMethod()
{
    SomeCriticalClass critical = new SomeCriticalClass();

    Action someDelegate = () => 
    {
         critical.Do();
    }

    someDelegate();
}
Run Code Online (Sandbox Code Playgroud)
  1. SomeMethod签名具有[SecuritySafeCritical]属性.
  2. SomeCriticalClass是一些[SecurityCritical]在类或方法Do级别具有属性的类.
  3. 我们创建一个自动推断的匿名委托Action.

问题

调用critical.Do()导致a 因为安全透明方法(匿名方法)正在尝试访问安全关键字段(SomeCriticalClass局部变量).MethodAccessException FieldAccessExceptioncritical

你怎么克服这个?

简单的方法是实现标记的实际方法,[SecuritySafeCritical]而不是使用匿名委托.但这将我们带到了前匿名代表和拉姆纳斯时代.我不想要这个.

其他简单的方法就是不使用安全透明度.这不是解决方案.

几乎所有来自Microsoft和开源社区的可用库都没有考虑到安全透明性.也就是说,任何自己的自定义代码都必须通过[SecuritySafeCritical]或者[SecurityCritical]/ methods/properties/delegates 与第三方库进行互操作.

实际上我相信安全透明度是一个很好的工具,因为它会强制更好,更安全的软件设计,关键操作非常本地化,其余代码以最小的权限工作.

.net c# security .net-4.0 .net-4.5

19
推荐指数
1
解决办法
5026
查看次数

为什么将IDictionary <TKey,TValue>上传到IEnumerable <object>会失败?

请参阅以下代码段:

(IEnumerable<object>)new Dictionary<string, string>()
Run Code Online (Sandbox Code Playgroud)

上面的强制转换将抛出无效的强制转换异常.

实际上,IDictionary<TKey, TValue>也间接实现IEnumerable<out T>,因为它也实现了ICollection<T>.也就是说,整个演员应该是有效的.

事实上,对我来说更奇怪的是,如果我在调试器手表插槽上运行整个演员,它就可以了!

在此输入图像描述

这是怎么回事?

.net c# casting c#-6.0 .net-4.6

19
推荐指数
1
解决办法
889
查看次数

JavaScript跨域调用:从HTTP调用到HTTPS

我需要对同一域的安全(HTTPS)URL进行异步调用.

目前该页面正在使用常规HTTP(非安全).

换句话说:这是在同一个域中调用URL但使用HTTPS.

在将此调用切换到HTTPS之前,我结束了实现服务器端代理以允许跨域AJAX调用,但现在我面临相同的源策略,因为HTTP和HTTPS也被认为是不同的来源.所以这个代理是无法使用的.

摘要:在这种情况下如何进行跨域,异步POST请求?

各种说明:

  • 我无法接受任何建议JSONP的答案.异步调用必须使用POST动词.
  • 我正在使用最新版本的jQuery.答案可能基于此库,或任何其他解决此问题.
  • 通过HTTPS访问整个页面不是一种解决方案.
  • 服务器平台是Microsoft .NET 4.0(ASP.NET 4.0).
  • UDPATE:CORS不是一个选项.在现代浏览器中没有广泛的支持.

javascript ajax http .net-4.0 cross-domain

18
推荐指数
2
解决办法
6万
查看次数

OpenID,如何开发提供者

目前我正在开发一些基础架构,并且我已经实现了自己的RESTful身份验证机制.

现在我想到,也许我不应该这样使用行业标准,因此与我的项目的互操作性在认证和授权方面可能是微不足道的,也更容易理解.

在查看了一些谷歌搜索的文章并在Stackoverflow中阅读了一些问答后,我找不到如何成为OpenID提供商 - 我不是在谈论使用谷歌,Windows Live,Facebook Connect等认证用户,我想开发一个支持OpenID的系统,如果有人想注册我的服务,他们将在我自己的域中进行 - .

实际上我的问题是:任何人都可以成为OpenID提供商,并且DotNetOpenAuth是一个库,可以在您自己的基础架构中开发此协议吗?

谢谢.

.net c# openid .net-4.0

17
推荐指数
2
解决办法
9421
查看次数

在恢复NuGet包时,在TFS Build 2015期间"无法找到版本"

我在2015年TFS Build期间遇到了NuGet包恢复问题.

由于某些软件包需要NuGet 3.x客户端,因此我已将新的脚本化构建配置为使用自定义NuGet位置,其中我放置了NuGet Command-Line 3.x beta的可执行文件.

每当我运行构建时,所有软件包都无法恢复,NuGet会抛出"无法找到版本..."错误:

Unable to find version '1.1.10' of package 'Microsoft.Bcl'.
Unable to find version '4.0.10' of package 'System.Threading'.
Unable to find version '1.1.37' of package 'System.Collections.Immutable'.
Unable to find version '1.0.0' of package 'Owin'.
Unable to find version '4.1.0' of package 'NLog'.
Unable to find version '7.0.1' of package 'Newtonsoft.Json'.
Unable to find version '2.0.1' of package 'MongoDB.Driver.Core'.
Unable to find version '2.0.1' of package 'MongoDB.Driver'.
Unable to find version …
Run Code Online (Sandbox Code Playgroud)

tfs visual-studio nuget visual-studio-2015 tfs-2015

17
推荐指数
1
解决办法
2万
查看次数

$(SolutionDir)通过CMD运行Sandcastle帮助文件生成器时,MSBuild属性不正确

当我myproject.shfbproj使用Windows CMD 运行Sandcastle帮助文件生成器项目文件(例如)时,我遇到一个恼人的问题:$(SolutionDir)具有相同的值$(ProjectDir),这意味着项目文档源将无法正确构建,因为我已经添加了自定义目标用途$(SolutionDir).

如果我从Visual Studio构建整个Sandcastle帮助文件生成器,它就会成功构建.

我正在使用以下命令(从存储项目的目录执行):

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Development myproject.shfbproj
Run Code Online (Sandbox Code Playgroud)

这有什么解决方法吗?

.net msbuild sandcastle cmd shfb

16
推荐指数
2
解决办法
2万
查看次数

使用JSON.NET将属性反序列化为ExpandoObject

例如,有一个像下一个的对象:

public class Container
{
   public object Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它以这种方式使用:

Container container = new Container
{
    Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};
Run Code Online (Sandbox Code Playgroud)

如果我反序列化从序列化上述实例获得的JSON字符串Data,即使我提供了该属性ExpandoObjectConverter,它也不会被反序列化为ExpandoObject:

Container container = JsonConvert.Deserialize<Container>(jsonText, new ExpandoObjectConverter());
Run Code Online (Sandbox Code Playgroud)

如何反序列化使用匿名对象分配的类属性,或者至少不是具体类型ExpandoObject

编辑:

有人回答说我可以使用动态对象.这对我不起作用.我知道我可以这样做,但事实并非如此,因为我需要一个ExpandoObject.谢谢.

编辑2:

其他一些用户回答我可以将JSON字符串反序列化为ExpandoObject.这不是这个问题的目标.我需要反序列化具有动态属性的具体类型.在JSON字符串中,此属性可以是关联数组.

c# serialization json.net expandoobject .net-4.5

14
推荐指数
1
解决办法
2万
查看次数

使用StackExchange.Redis的Redis键空间通知

我环顾四周,我无法找到如何使用StackExchange.Redis库在Redis上执行键空间通知订阅.

检查可用的测试我发现使用频道的pubsub,但这更像是服务总线/排队,而不是订阅特定的Redis键事件.

是否可以使用StackExchange.Redis来利用此Redis功能?

.net c# publish-subscribe redis stackexchange.redis

14
推荐指数
1
解决办法
8992
查看次数

拒绝令牌请求时自定义OWIN/OAuth HTTP状态代码

我派生的OAuthAuthorizationServerProvider是为了验证客户端和资源所有者.

当我验证资源所有者时,我发现他们的凭据无效,我打电话context.Rejected(),HTTP响应附带HTTP/400错误请求状态代码,而我希望HTTP/401未经授权.

如何自定义OAuthAuthorizationServerProvider响应HTTP状态代码?

.net c# http oauth owin

13
推荐指数
1
解决办法
7308
查看次数