asp.net .NET -获取协议、主机和端口

mzillmmw  于 2023-10-21  发布在  .NET
关注(0)|答案(9)|浏览(149)

在.NET中是否有一种简单的方法可以快速获取当前的协议、主机和端口?例如,如果我在以下URL上:
http://www.mywebsite.com:80/pages/page1.aspx
我需要返回:
http://www.mywebsite.com:80
我知道可以使用Request.Url.AbsoluteUri获取完整的URL,也知道可以使用Request.Url.Authority获取主机和端口,但我不确定在不解析URL字符串的情况下获取协议的最佳方法。
有什么建议吗?

balp4ylt

balp4ylt1#

尽管@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,它将包含在结果中。

zour9fqk

zour9fqk2#

下面的(C#)代码应该可以实现这一点

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

daolsyd03#

如果你是在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

我希望这能帮上忙。:)

x9ybnkn6

x9ybnkn64#

一个更结构化的方法是使用UriBuilder。这避免了直接的字符串操作。

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

xoshrz7s5#

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

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

UriComponents枚举允许您指定要包含的URI组件。

n9vozmp4

n9vozmp46#

URL将返回请求的Uri。一旦你有了它,你可以检索几乎任何你想要的。要获取协议,请调用Scheme属性。
样品名称:

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

希望这对你有帮助。

aiazj4mn

aiazj4mn7#

这与霍尔格的回答非常相似。如果你需要抓取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 class提供了一系列的方法,其中许多我没有列出。
在我的例子中,我需要将LocalHostPort Number一起沿着,所以我是这样做的:

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

成功抓住:http://localhost:12345

vh0rcniy

vh0rcniy8#

在我的情况下

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

努力让
https://www.mywebsite.com:80

3duebb1j

3duebb1j9#

在我的情况下,我使用这个

Request.Url.ToString().Remove(Request.Url.ToString().Count() - (Request.ServerVariables["URL"].ToString().Count()))

哪里

Request.Url.ToString()

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

Request.ServerVariables["URL"].ToString()

返回/pages/page1.aspx

相关问题