Why doesn't System.Uri recognize query parameter for local file path?

前端 未结 2 1554
感情败类
感情败类 2021-01-11 21:52

I need to add some additional query information to file path as query parameter to parse path later during files processing. I though that System.Uri class can hel

相关标签:
2条回答
  • 2021-01-11 22:05

    This is a bug which Microsoft won't fix : Bug 594562 As you can see they propose reflection as an workaround:

    ...
    Console.WriteLine("Before");
    Uri fileUri = new Uri("file://host/path/file?query#fragment");
    Console.WriteLine("AbsoluteUri: " + fileUri.AbsoluteUri);
    Console.WriteLine("ToString: " + fileUri.ToString());
    Console.WriteLine("LocalPath: " + fileUri.LocalPath);
    Console.WriteLine("Query: " + fileUri.Query);
    Console.WriteLine("Fragment: " + fileUri.Fragment);
    
    Type uriParserType = typeof(UriParser);
    FieldInfo fileParserInfo = uriParserType.GetField("FileUri", BindingFlags.Static | BindingFlags.NonPublic);
    UriParser fileParser = (UriParser)fileParserInfo.GetValue(null);
    FieldInfo fileFlagsInfo = uriParserType.GetField("m_Flags", BindingFlags.NonPublic | BindingFlags.Instance);
    int fileFlags = (int)fileFlagsInfo.GetValue(fileParser);
    int mayHaveQuery = 0x20;
    fileFlags |= mayHaveQuery;
    fileFlagsInfo.SetValue(fileParser, fileFlags);
    
    Console.WriteLine();
    Console.WriteLine("After");
    fileUri = new Uri("file://host/path/file?query#fragment");
    Console.WriteLine("AbsoluteUri: " + fileUri.AbsoluteUri);
    Console.WriteLine("ToString: " + fileUri.ToString());
    Console.WriteLine("LocalPath: " + fileUri.LocalPath);
    Console.WriteLine("Query: " + fileUri.Query);
    Console.WriteLine("Fragment: " + fileUri.Fragment);  
    ...  
    
    0 讨论(0)
  • 2021-01-11 22:21

    Query string parameters are not valid when requesting a local file.

    When you requests a file using http the file is executed and is therefore able to read and process the querystring. When you request a local file it is not executed and so is unable to make use of the querystring.

    What is the reason you are adding querystring params to a file request? Is there another way of doing it?

    0 讨论(0)
提交回复
热议问题