ฉันต้องสามารถใช้ URL แบบเต็มของหน้าเว็บที่ฉันใช้จากการควบคุมของผู้ใช้ มันเป็นเพียงเรื่องของการเชื่อมโยงตัวแปร Request เข้าด้วยกันเป็นกลุ่มหรือไม่? ถ้าเป็นเช่นนั้น หรือมีวิธี simpiler มากกว่าหรือไม่
ฉันต้องสามารถใช้ URL แบบเต็มของหน้าเว็บที่ฉันใช้จากการควบคุมของผู้ใช้ มันเป็นเพียงเรื่องของการเชื่อมโยงตัวแปร Request เข้าด้วยกันเป็นกลุ่มหรือไม่? ถ้าเป็นเช่นนั้น หรือมีวิธี simpiler มากกว่าหรือไม่
คำตอบ:
ฉันมักจะใช้Request.Url.ToString()
เพื่อให้ได้ URL แบบเต็ม (รวมถึงการสืบค้น) โดยไม่ต้องต่อข้อมูล
Request.Url.ToString()
ไม่รวม queryString
นี่คือรายการที่ฉันมักจะอ้างถึงสำหรับข้อมูลประเภทนี้:
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.AbsoluteUri
สถานที่ให้บริการนี้ทำทุกสิ่งที่คุณต้องการในการโทรสั้น ๆ
สำหรับASP.NET Core
คุณจะต้องสะกดมันออกมา:
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
หรือคุณสามารถเพิ่มคำสั่งที่ใช้ในมุมมองของคุณ:
@using Microsoft.AspNetCore.Http.Extensions
แล้วก็
@Context.Request.GetDisplayUrl()
_ViewImports.cshtml
อาจจะเป็นสถานที่ที่ดีสำหรับการที่@using
Request.RawUrl
หากคุณต้องการ 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.Url.OriginalString
กว่าRequest.Url.ToString()
(ตามMSDN )
OriginalString
แน่นอนและที่มีอะไรจะทำอย่างไรกับ
ขอบคุณพวกฉันใช้ทั้งคำตอบของคุณ @Christian และ @Jonathan สำหรับความต้องการเฉพาะของฉัน
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
ฉันไม่ต้องกังวลเกี่ยวกับ http ที่ปลอดภัยจำเป็นต้องใช้ตัวแปรชื่อเซิร์ฟเวอร์และ 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();