C# 如何使用WebClient.DownloadData(下载到本地DummyPage.aspx)

C# 如何使用WebClient.DownloadData(下载到本地DummyPage.aspx),c#,asp.net,url,path,localhost,C#,Asp.net,Url,Path,Localhost,我正在跟随一个关于这个链接的教程 现在我被这些代码困住了 private const string DummyPageUrl = "http://localhost/TestCacheTimeout/WebForm1.aspx"; private void HitPage() { WebClient client = new WebClient(); client.DownloadData(DummyPageUrl); } 我的本地应用程序地址在“localhost

我正在跟随一个关于这个链接的教程

现在我被这些代码困住了

private const string DummyPageUrl = 
    "http://localhost/TestCacheTimeout/WebForm1.aspx";

private void HitPage()
{
    WebClient client = new WebClient();
    client.DownloadData(DummyPageUrl);
}
我的本地应用程序地址在“localhost”后面有一个端口号,那么如何获得完整路径(可以在应用程序启动方法中完成)?我希望它是非常通用的,以便它可以在任何情况下工作

非常感谢

更新

我在应用程序_Start中尝试了这一点,它运行良好,但在发布到IIS7时立即返回错误

String path = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/");

如果它正在回调同一个服务器,可以使用
Request
对象:

var url = new Uri(Request.Url, "/TestCacheTimeout/WebForm1.aspx").AbsoluteUri;
否则,将另一台服务器的详细信息存储在配置文件或数据库中,只需为其指定正确的值即可


但更好的问题是:为什么要通过http与自己交谈?为什么不直接调用类方法呢?就我个人而言,我会使用外部计划作业来完成此任务。

我怀疑您使用的是内置于Visual Studio中的ASP.NET开发服务器,默认情况下,该服务器倾向于更改端口号。如果是这种情况,那么您可以尝试简单地将开发服务器配置为始终使用相同的端口。然后只需将端口号添加到URL,如下所示:

private const string DummyPageUrl = 
"http://localhost:42001/TestCacheTimeout/WebForm1.aspx";

您需要一个答案,当您部署到另一个可能有虚拟应用程序文件夹的环境时,这个答案会起作用

// r is Request.Url
var url = new Uri(r, System.Web.VirtualPathUtility.ToAbsolute("~/Folder/folder/page.aspx")).AbsoluteUri;

这将在所有情况下都有效,并且在部署时不会出现令人不快的意外情况。

我所要做的就是按照该站点的说明来模拟一个服务,该服务可以一直运行,并随着时间的推移为我做一些事情。如果您的Web应用在虚拟目录中运行,您可以/应该使用
var url=Request.url.ToString().Substring()(0,Request.Url.ToString().LastIndexOf(“/”)+“/WebForm1.aspx”;
如果部署到使用应用程序文件夹的环境中,则会出现此问题。。。。