带有.net反射的访问方法异常

带有.net反射的访问方法异常,.net,windows-phone-8,linkedin,.net,Windows Phone 8,Linkedin,我正在尝试设置一个策略,以便在发送吊床rest请求之前使用url时保留未转义字符%2f。正如某些.net开发人员可能知道的那样,在尝试使用公共url字符串中的未转义字符调用linkedin api时,存在编码问题 App.config是不可能的,因为它是一个手机项目 反射是avrious站点上建议的另一种解决方法,包括这一个 在使用其中一种解决方案时 var getSyntaxMethod = typeof(UriParser).GetMethod("GetS

我正在尝试设置一个策略,以便在发送吊床rest请求之前使用url时保留未转义字符%2f。正如某些.net开发人员可能知道的那样,在尝试使用公共url字符串中的未转义字符调用linkedin api时,存在编码问题

App.config是不可能的,因为它是一个手机项目

反射是avrious站点上建议的另一种解决方法,包括这一个

在使用其中一种解决方案时

      var getSyntaxMethod =
            typeof(UriParser).GetMethod("GetSyntax", BindingFlags.Static | 
              BindingFlags.NonPublic);
        if (getSyntaxMethod == null)
        {
            throw new MissingMethodException("UriParser", new Exception("GetSyntax"));
        }
        var uriParser = getSyntaxMethod.Invoke(null, new object[] { "http" });

        var flagsField =
            uriParser.GetType().BaseType.GetField("m_Flags", BindingFlags.Instance | 
                 BindingFlags.NonPublic);
        if (flagsField == null)
        {
            throw new MissingFieldException("UriParser", new Exception("m_Flags"));
        }
        int oldValue = (int)flagsField.GetValue(uriParser);
        oldValue += 4096;
        flagsField.SetValue(uriParser, oldValue);
我得到以下错误-

     Additional information: Attempt by method                
     'PhotonWorld.View.LinkedinAuthPage.AddAllowAnyOtherHostFlagToHttpUriParser()' to   
      access method 'System.UriParser.GetSyntax(System.String)' failed
我想这是手机特有的。我用的是wp8


其他人有问题吗?

是的,这似乎是由于silverlight的限制,包括silverlight for windows phone版本:

“在Silverlight中,您不能使用反射来访问私有类型和成员。如果类型或成员的访问级别会阻止您在静态编译代码中访问它,则您不能使用反射动态访问它。”。[]

我测试了演示代码,来自:

这在控制台应用程序中运行良好,但引发异常:

方法
尝试访问方法“System.UriParser.GetSyntax(System.String)”失败


当尝试在Windows Phone应用程序(WP7和WP8)中调用私有方法时。

感谢您的工作…我的项目只是Windows Phone 8 sdk、c#、xaml…虽然我猜Silverlight代码库用于Windows Phone 8 sdk?…那么,通过公共URL为手机开发人员获取链接详细信息的最终解决方案是什么?既然所有的门都关上了,还有什么想法吗?我只是惊讶地发现MSDN中存在这样的限制,并试图证明这一点。是的,windows phone基于silverlight,因此我声明silverlight适用于windows phone。无论如何,到目前为止,我找不到有效的解决方案。这似乎是一个在标准.NET framework中已修复的旧错误(
var url=new Uri(“http://x/y./z”;
生成正确的url,而不在控制台应用程序中进行反射,但相同的代码会导致在WP应用程序中删除点)。我建议在两个平台上打开一个新的特定于问题的问题,询问这种不同的行为(或者我稍后会做,我也很好奇)。
var surl = "http://x/y./z";

var url = new Uri(surl);
Console.WriteLine("Broken: " + url.ToString());

MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
    foreach (string scheme in new[] { "http", "https" })
    {
        UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
        if (parser != null)
        {
            int flagsValue = (int)flagsField.GetValue(parser);
            // Clear the CanonicalizeAsFilePath attribute
            if ((flagsValue & 0x1000000) != 0)
                flagsField.SetValue(parser, flagsValue & ~0x1000000);
        }
    }
}

url = new Uri(surl);
Console.WriteLine("Fixed: " + url.ToString());