在线程中运行时是否可以获取当前Web应用程序的基本uri?
请记住,HttpContext.Current将为null,因此没有可以使用的Request对象。
目标:能够从线程向Web应用程序中的不同URL发出Web请求以获取呈现的输出。
答案 0 :(得分:1)
有几种方法可以做到这一点:
"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);
答案 1 :(得分:0)
您可以从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()));
}