在線程中運行時,是否可以獲取當前Web應用程序的基本URI?來自後臺進程的基本Uri
請記住HttpContext.Current將爲空,因此沒有Request對象可供使用。
目標:能夠從線程向Web應用程序中的不同URL發出Web請求以獲取呈現的輸出。
在線程中運行時,是否可以獲取當前Web應用程序的基本URI?來自後臺進程的基本Uri
請記住HttpContext.Current將爲空,因此沒有Request對象可供使用。
目標:能夠從線程向Web應用程序中的不同URL發出Web請求以獲取呈現的輸出。
有這樣做的幾種方法:
"http://localhost" + HttpRuntime.AppDomainAppVirtualPath
string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/"; ParameterizedThreadStart worker= new ParameterizedThreadStart(MyWorkerMethod); new Thread(worker).Start(baseUrl);
你可以得到域和協議部分從IIS ADSI提供者,但由於可以有許多綁定,你必須選擇一個自己:
protected void ListServerBindings()
{
var ls = new List<string>();
var ss = HttpRuntime.AppDomainAppId.Split('/');
var e = new DirectoryEntry("IIS://localhost/" + ss[2] + "/" + ss[3]);
foreach(string s in e.Properties["ServerBindings"])
{
ss = s.Split(':');
ls.Add("http://" + (ss[2].Length == 0 ? "localhost" : ss[2]) + (ss[1] == "80" ? null : ":" + ss[1]) + HttpRuntime.AppDomainAppVirtualPath);
}
foreach(string s in e.Properties["SecureBindings"])
{
ss = s.Split(':');
ls.Add("https://" + (ss[2].Length == 0 ? "localhost" : ss[2]) + (ss[1] == "443" ? null : ":" + ss[1]) + HttpRuntime.AppDomainAppVirtualPath);
}
Response.Write(string.Join("<br />", ls.ToArray()));
}
肯定希望能得到全URL(域和協議)。雖然 – Rob 2010-03-02 00:00:49