【发布时间】:2010-09-07 15:04:36
【问题描述】:
我需要能够从用户控件获取我所在页面的完整 URL。只是将一堆请求变量连接在一起的问题吗?如果有,有哪些?还是有更简单的方法?
【问题讨论】:
-
对于负载平衡网络农场中的任何人.. 请注意使用 System.Url 时出现的端口号:stackoverflow.com/questions/7674850/…
标签: c# asp.net user-controls
我需要能够从用户控件获取我所在页面的完整 URL。只是将一堆请求变量连接在一起的问题吗?如果有,有哪些?还是有更简单的方法?
【问题讨论】:
标签: c# asp.net user-controls
这是我通常参考的此类信息的列表:
Request.ApplicationPath : /virtual_dir
Request.CurrentExecutionFilePath : /virtual_dir/webapp/page.aspx
Request.FilePath : /virtual_dir/webapp/page.aspx
Request.Path : /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath : d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString : /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath : /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri : http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host : localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery : /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port : 80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme : http
Request.Url.Segments : /
virtual_dir/
webapp/
page.aspx
希望你会发现这很有用!
【讨论】:
Request.QueryString 仅返回 q=qvalue
我通常使用Request.Url.ToString() 来获取完整的url(包括查询字符串),不需要连接。
【讨论】:
Request.Url.ToString() 不包括 queryString。
Request.Url.AbsoluteUri
此属性可满足您的所有需求,只需一个简洁的调用即可。
【讨论】:
对于ASP.NET Core,您需要将其拼写出来:
var request = Context.Request;
@($"{ request.Scheme }://{ request.Host }{ request.Path }{ request.QueryString }")
或者您可以在视图中添加 using 语句:
@using Microsoft.AspNetCore.Http.Extensions
然后
@Context.Request.GetDisplayUrl()
_ViewImports.cshtml 可能更适合@using
【讨论】:
$"{ request.Scheme }{ Uri.SchemeDelimiter }{ request.Host }{ request.PathBase.Add(request.Path) }{ request.QueryString }"
如果您需要完整的 URL 作为从 http 到查询字符串的所有内容,则需要连接以下变量
Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("QUERY_STRING")
【讨论】:
Request.RawUrl
【讨论】:
使用Request.Url.OriginalString 比使用Request.Url.ToString() 更好(根据MSDN)
【讨论】:
OriginalString无关。
谢谢大家,我结合了@Christian 和@Jonathan 的回答来满足我的特定需求。
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
我不需要担心安全 http,需要 servername 变量,RawUrl 处理来自域名的路径并包含查询字符串(如果存在)。
【讨论】:
如果你还需要端口号,你可以使用
Request.Url.Authority
例子:
string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();
if (Request.ServerVariables["HTTPS"] == "on")
{
url = "https://" + url;
}
else
{
url = "http://" + url;
}
【讨论】:
试试下面的 -
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
【讨论】: