Giả sử tôi đang lưu trữ một trang web tại http://www.foobar.com .
Có cách nào để tôi có thể lập trình xác định " http://www.foobar.com/ " trong mã phía sau của mình (tức là mà không cần phải mã hóa nó trong cấu hình web của tôi) không?
Giả sử tôi đang lưu trữ một trang web tại http://www.foobar.com .
Có cách nào để tôi có thể lập trình xác định " http://www.foobar.com/ " trong mã phía sau của mình (tức là mà không cần phải mã hóa nó trong cấu hình web của tôi) không?
Câu trả lời:
HttpContext.Current.Request.Url có thể cung cấp cho bạn tất cả thông tin trên URL. Và có thể chia nhỏ url thành các mảnh của nó.
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
Phương pháp Uri :: GetLeftPart :
Phương thức GetLeftPart trả về một chuỗi chứa phần ngoài cùng bên trái của chuỗi URI, kết thúc bằng phần được chỉ định bởi một phần.
Lược đồ và phân đoạn quyền hạn của URI.
Đối với bất kỳ ai còn thắc mắc, câu trả lời đầy đủ hơn có tại http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/ .
public string FullyQualifiedApplicationPath
{
get
{
//Return variable declaration
var appPath = string.Empty;
//Getting the current context of HTTP request
var context = HttpContext.Current;
//Checking the current context content
if (context != null)
{
//Formatting the fully qualified website url/name
appPath = string.Format("{0}://{1}{2}{3}",
context.Request.Url.Scheme,
context.Request.Url.Host,
context.Request.Url.Port == 80
? string.Empty
: ":" + context.Request.Url.Port,
context.Request.ApplicationPath);
}
if (!appPath.EndsWith("/"))
appPath += "/";
return appPath;
}
}
context.Request.Url.Port == 80
bằng (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")
hoặc sử dụng câu trả lời bên dưới
Nếu Url ví dụ là http://www.foobar.com/Page1
HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"
HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"
HttpContext.Current.Request.Url.Scheme; //returns "http/https"
HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"
.Host
của "http://www.foobar.com/Page1"
là www.foobar.com
, không phải foobar.com
.
Để nhận toàn bộ chuỗi URL yêu cầu:
HttpContext.Current.Request.Url
Để nhận phần www.foo.com của yêu cầu:
HttpContext.Current.Request.Url.Host
Lưu ý rằng bạn, ở một mức độ nào đó, phụ thuộc vào các yếu tố bên ngoài ứng dụng ASP.NET của bạn. Nếu IIS được định cấu hình để chấp nhận nhiều hoặc bất kỳ tiêu đề máy chủ nào cho ứng dụng của bạn, thì bất kỳ miền nào trong số đó được phân giải cho ứng dụng của bạn qua DNS có thể hiển thị dưới dạng Url yêu cầu, tùy thuộc vào tên miền mà người dùng đã nhập.
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;
host.com => trả về host.com
s.host.com => trả về host.com
host.co.uk => trả về host.co.uk
www.host.co.uk => trả về host.co.uk
s1.www.host.co.uk => trả về host.co.uk
Tôi biết điều này đã cũ hơn nhưng cách chính xác để làm điều này bây giờ là
string Domain = HttpContext.Current.Request.Url.Authority
Điều đó sẽ nhận được DNS hoặc địa chỉ ip có cổng cho máy chủ.
Điều này cũng hoạt động:
string url = HttpContext.Request.Url.Authority;
Ví dụ C # Dưới đây:
string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
cookieDomain = domainReg.Match(host).Groups[1].Value;
}
Request
đối tượng.