我正在寻找使用System.UriBuilder更改给定System.Uri实例的方案的规范方法,而不需要糟糕的字符串操作和魔术常量.说我有
var uri = new Uri("http://localhost/hello")
Run Code Online (Sandbox Code Playgroud)
我需要将其更改为" https ".我的问题是在有限的UriBuilderctors和Uri.Port默认为80(我们应该将它改为443?硬编码?).代码必须遵守所有Uri属性,例如可能的基本身份验证凭据,查询字符串等.
Use*_*rol 89
结束这一个:
var uriBuilder = new UriBuilder(requestUrl)
{
Scheme = Uri.UriSchemeHttps,
Port = -1 // default port for scheme
};
Run Code Online (Sandbox Code Playgroud)
Goo*_*ide 32
UserControl的答案很好,除非您必须确保在URI中保留非默认端口.
例如,http://localhost:12345/hello应该成为https://localhost:12345/hello而不是https://localhost/hello.
以下是如何轻松完成此操作:
public static string ForceHttps(string requestUrl)
{
var uri = new UriBuilder(requestUrl);
var hadDefaultPort = uri.Uri.IsDefaultPort;
uri.Scheme = Uri.UriSchemeHttps;
uri.Port = hadDefaultPort ? -1 : uri.Port;
return uri.ToString();
}
Run Code Online (Sandbox Code Playgroud)
请注意,我们必须uri.Uri.IsDefaultPort 在设置之前阅读uri.Scheme.
这是一个工作示例:https://dotnetfiddle.net/pDrF7s
晚安书呆子骄傲的答案的另一个迭代,作为扩展:
public static Uri RewriteHttps(this Uri originalUri)
{
return new UriBuilder(originalUri)
{
Scheme = Uri.UriSchemeHttps,
Port = originalUri.IsDefaultPort ? -1 : originalUri.Port // -1 => default port for scheme
}.Uri;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16699 次 |
| 最近记录: |