.NET中是否有一种简单的方法可以快速获取当前协议,主机和端口? 例如,如果我在以下URL上:

http://www.mywebsite.com:80/pages/page1.aspx

我需要退货:

http://www.mywebsite.com:80

我知道我可以使用Request.Url.AbsoluteUri来获取完整的URL,并且我知道可以使用Request.Url.Authority来获取主机和端口,但是我不确定在不解析的情况下获取协议的最佳方法URL字符串。

有什么建议么?

===============>>#1 票数:388

即使@Rick对此问题的答案是可以接受的,实际上,使用名称不Uri.GetLeftPart()方法,实际上还有一种更短的方法。

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);

但是, GetLeftPart()有一个问题。 如果该端口是该方案的默认端口,它将被删除。 由于端口80是http的默认端口,因此在上面的示例中, GetLeftPart()的输出将为http://www.mywebsite.com

如果端口号不是80,则将其包括在结果中。

===============>>#2 票数:161 已采纳

以下(C#)代码应该可以解决问题

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;

===============>>#3 票数:58

好吧,如果您在Asp.Net中进行此操作或可以访问HttpContext.Current.Request,我会说这些是更简单,更通用的获取方法:

var scheme = Request.Url.Scheme; // will get http, https, etc.
var host = Request.Url.Host; // will get www.mywebsite.com
var port = Request.Url.Port; // will get the port
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx

我希望这有帮助。 :)

===============>>#4 票数:31

一种更结构化的方法是使用UriBuilder。 这样可以避免直接的字符串操作。

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);

===============>>#5 票数:22

Request.Url将向您返回请求的Uri 一旦有了它,您就可以检索几乎所有您想要的东西。 要获取协议,请调用Scheme属性。

样品:

Uri url = Request.Url;
string protocol = url.Scheme;

希望这可以帮助。

===============>>#6 票数:17

甚至更短的方法,可能需要更新的ASP.Net:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)

通过UriComponents枚举,您可以指定要包含的URI的哪些组件。

===============>>#7 票数:8

与Holger的答案非常相似。 如果您需要获取URL,可以执行以下操作:

Uri uri = Context.Request.Url;         
var scheme = uri.Scheme // returns http, https
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https://
var host = uri.Host; // return www.mywebsite.com
var port = uri.Port; // returns port number

Uri类提供了许多方法,但我没有列出。

在我的实例中,我需要抓住LocalHostPort Number ,所以这就是我所做的:

var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

哪个成功抓取: http://localhost:12345

  ask by Jeremy translate from so

未解决问题?本站智能推荐:

2回复

FxCop告诉我使用.Net Uri类是否错误?

在Amazon S3存储桶中获取某物的URL时,可以在其末尾附加一个签名,以确认用户有权查看该对象,并且URL如下所示: https://mybucket.amazonaws.com/mykey?AWSAccessKeyId=myaccesskey& Expires = 123
1回复

在.NET中解析URL

我正在寻找一个可以解析URL的.NET Framework类。 一些需要解析的URL示例: server:8088 server:8088/func1 server:8088/func1/SubFunc1 http://server http://s
1回复

无效的URI转义(.Net 4.5)

我遵循C#代码(.Net 4.5) 在打开的本地文件C:\\Users\\KVV\\Desktop\\1111111111111\\Windows%20XP6.jpg 捕获具有FileName = C:\\Users\\KVV\\Desktop\\1111111111111\\Wi
1回复

.NET Uri.ToString()破坏了URL?

我注意到,如果当后面的URI是带有百分比编码空格(%20)的URL时调用Uri.ToString() ),那么结果将是格式错误的URL: 由于URL是URI (相反的陈述是不正确的)并且具有非编码空格的URL 无效,因此使用Uri作为URL的容器似乎是不安全的。 这是正确的行为吗?
2回复

.NET Compact Framework中的URI操作

在.NET Compact Framework中处理URI的最佳方法是什么? 我基本上需要加载一个URL字符串,然后允许用户更改“方案”和“主机”值。 到目前为止,我一直在使用Uri类,但是它本质上是不可变的,因此一旦初始化,就无法真正修改Uri的任何组件。 UriBuilder看起来
7回复

在asp.net中确定网站的绝对完全限定网址

无论站点是否在虚拟目录中,无论我的代码在目录结构中的哪个位置,我如何始终获得站点的绝对,完全限定的根或基本URL? 我已经尝试了我能想到的每一个变量和功能,并没有找到一个好方法。 我希望能够获取当前站点的URL,即http://www.example.com,或者如果它是虚拟目录, 请访
1回复

在C#中获取虚拟URL

我们有两个虚拟URL正在使用webseal进行Intranet应用,例如, https://third-party-site.com/myapplication/Default.aspx https://my-application.com/Default.aspx 从各自站点成
1回复

Ayende在Raccoon Blog源代码中引用的.NET中的Uri错是什么?

在查看Ayende的Racoon Blog的来源时,我在global.asax.cs看到了这个: 这似乎是第一个请求中发生的错误的解决方法。 有谁知道这是什么错误或如何重现它?
3回复

当Java可以“ Hi%E1”运行时,为什么.NET无法解码此字符串?

我的问题是.Net Http / Uri库无法解码或取消转义此字符序列:“ Hi%E1”。 Uri.UnescapeDataString和HttpUtility.UrlDecode都无法做到这一点。 尽管我有解决此问题的方法( URL解码混乱 ),但我想了解为什么它会失败。 此处的
2回复

使用asp.net mvc应用程序编写URL

我的asp.net mvc应用程序中的url有问题:我有两个控制器有两个动作。 在控制器Client 结果是: 但在控制器Akeo 结果是这样的异常: 意见是: 那么结果之间存在这种差异的原因是什么? 我该如何避免这个错误?