สมมติว่าฉันพื้นที่เว็บไซต์ที่http://www.foobar.com
มีวิธีใดบ้างที่ฉันสามารถตรวจสอบ " http://www.foobar.com/ " ในโค้ดของฉันโดยทางโปรแกรมได้(เช่นโดยไม่ต้องฮาร์ดโค้ดในการกำหนดค่าเว็บ)
สมมติว่าฉันพื้นที่เว็บไซต์ที่http://www.foobar.com
มีวิธีใดบ้างที่ฉันสามารถตรวจสอบ " http://www.foobar.com/ " ในโค้ดของฉันโดยทางโปรแกรมได้(เช่นโดยไม่ต้องฮาร์ดโค้ดในการกำหนดค่าเว็บ)
คำตอบ:
HttpContext.Current.Request.Urlสามารถรับข้อมูลทั้งหมดใน URL และสามารถแยก url ออกเป็นส่วนย่อย ๆ
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
เมธอด GetLeftPart จะส่งคืนสตริงที่มีส่วนซ้ายสุดของสตริง URI ซึ่งลงท้ายด้วยส่วนที่ระบุโดยส่วนหนึ่ง
โครงการและส่วนอำนาจของ URI
สำหรับทุกคนที่ยังคงสงสัยว่าคำตอบที่สมบูรณ์มากขึ้นสามารถใช้ได้ที่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
ด้วย(context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")
หรือใช้คำตอบด้านล่าง
หาก URL ตัวอย่างคือ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
ของ"http://www.foobar.com/Page1"
เป็นไม่ได้www.foobar.com
foobar.com
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"
หากต้องการรับสตริง URL คำขอทั้งหมด:
HttpContext.Current.Request.Url
หากต้องการรับส่วน www.foo.com ของคำขอ:
HttpContext.Current.Request.Url.Host
โปรดทราบว่าในระดับหนึ่งคุณได้รับความเมตตาจากปัจจัยภายนอกแอปพลิเคชัน ASP.NET ของคุณในระดับหนึ่ง หากมีการกำหนดค่า IIS ให้ยอมรับหลายส่วนหรือส่วนหัวของโฮสต์สำหรับแอปพลิเคชันของคุณโดเมนใด ๆ ที่แก้ไขไปยังแอปพลิเคชันของคุณผ่าน DNS อาจแสดงเป็น URL คำขอขึ้นอยู่กับว่าผู้ใช้ป้อนข้อมูลใด
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;
host.com => return host.com
s.host.com => return host.com
host.co.uk => return host.co.uk
www.host.co.uk => return host.co.uk
s1.www.host.co.uk => return host.co.uk
- การเพิ่มพอร์ตสามารถช่วยได้เมื่อเรียกใช้ IIS Express
Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port
string domainName = Request.Url.Host
ฉันรู้ว่ามันเก่ากว่านี้ แต่วิธีที่ถูกต้องในการทำตอนนี้คือ
string Domain = HttpContext.Current.Request.Url.Authority
ซึ่งจะได้รับ DNS หรือที่อยู่ IP พร้อมพอร์ตสำหรับเซิร์ฟเวอร์
สิ่งนี้ยังใช้งานได้:
สตริง url = HttpContext.Request.Url.Authority;
C # ตัวอย่างด้านล่าง:
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;
}
สิ่งนี้จะส่งคืนสิ่งที่คุณถามโดยเฉพาะ
Dim mySiteUrl = Request.Url.Host.ToString()
ฉันรู้ว่านี่เป็นคำถามที่เก่ากว่า แต่ฉันต้องการคำตอบง่ายๆเหมือนกันและสิ่งนี้จะส่งกลับสิ่งที่ถาม (โดยไม่มี http: //)
Request
วัตถุ