【问题标题】:UriBuilder escapes the ? to %3F, but not in every applicationUriBuilder 逃脱 ?到 %3F,但不是在每个应用程序中
【发布时间】:2018-10-02 08:50:54
【问题描述】:

我正在使用 UriBuilder 创建一个包含查询的 Uri。 我想创建一个这样的 Uri:

file:///C:/ProgramData/bla/index.html?cs=6000

但我得到的是:

file:///C:/ProgramData/bla/index.html%3Fcs=6000

我的代码如下所示:

const string HELP_DIRECTORY_NAME = "help";
const int TOPIC_ID = 6000;

var baseUri = new Uri(@"C:\ProgramData\bla\");
var builder = new UriBuilder(baseUri);
builder.Path = $"{baseUri.AbsolutePath}{HELP_DIRECTORY_NAME}/index.html";

builder.Query = $"cs={TOPIC_ID}";

string absoluteUri = builder.Uri.AbsoluteUri;

absoluteUri 是:

file:///C:/ProgramData/bla/help/index.html?cs=6000

但从我的 VB.Net 应用程序调用它是:

file:///C:/ProgramData/bla/help/index.html%3Fcs=6000

使用相同的代码。

不知道 VB.Net 是否在这里发挥作用,我的理解是它不应该。

如何阻止 UriBuilder 转义我的查询?

【问题讨论】:

  • 您的 C# 代码按预期工作。所以我想这是一个VB问题。也许您应该将 vb 标签添加到您的问题中。
  • 你能展示你的VB代码吗?
  • VB.Net 代码只是从 C# dll 调用此代码。这只是唯一不同的地方。调用代码的 C# 应用程序正在运行
  • @AndrewMorton 我不太明白你的问题。渲染是什么意思?
  • @HankTheTank 顺便说一句,它甚至不是 UriBuilder 正在逃避任何东西。它是 Uri 类本身。 builder.Uri 返回一个 Uri 实例。您正在调用 Uri.AbsoluteUri 将其转换为 string - changed in .NET 4.5

标签: c# .net url


【解决方案1】:

正如@PanagiotisKanavos 所指出的,Uri 类的行为在框架版本 4.5 中的某处发生了变化。 我们正在迁移到 4.7.2,但我们忘记切换那个项目。 使用 4.7.2 它可以按预期工作。这与VB.Net无关

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多