如何通过URL检查Web服务器上是否存在文件?

在我们的应用程序中,我们有一些在线帮助。 它非常简单:如果用户点击帮助按钮,则根据当前语言和帮助上下文构建URL(例如“ http://example.com/help/”+ [LANG_ID] +“[HELP_CONTEXT])和在浏览器中调用。

所以我的问题是:如何在不加载完整文件内容的情况下检查Web服务器上是否存在文件?

谢谢你的帮助!

更新:感谢您的帮助。 我的问题已得到解答。 现在我们有代理身份validation问题,无法发送HTTP请求;)

您可以使用.NET执行HEAD请求,然后查看响应的状态。

您的代码看起来像这样(改编自The Lowly HTTP HEAD Request ):

// create the request HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; // instruct the server to return headers only request.Method = "HEAD"; // make the connection HttpWebResponse response = request.GetResponse() as HttpWebResponse; // get the status code HttpStatusCode status = response.StatusCode; 

这是一个详细列出StatusCode枚举器可以返回的状态代码的列表。

我们是否可以假设您在检索帮助页面的同一Web服务器上运行Web应用程序? 如果是,那么您可以使用Server.MapPath方法查找服务器上文件的路径,并结合System.IO命名空间中的File.Exists方法来确认该文件是否存在。

发送URL的HEAD请求(而不是GET)。 如果不存在,服务器将返回404。

看一下HttpWebResponse类。 你可以这样做:

 string url = "http://example.com/help/" + LANG_ID + HELP_CONTEXT; WebRequest request=WebRequest.Create(URL); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusDescription=="OK") { // worked } 

如果要检查服务器上文档的状态:

 function fetchStatus(address) { var client = new XMLHttpRequest(); client.onreadystatechange = function() { // in case of network errors this might not give reliable results if(this.readyState == 4) returnStatus(this.status); } client.open("HEAD", address); client.send(); } 

谢谢。

编辑:显然,这样做的好方法是HEAD请求。

您还可以创建一个服务器端应用程序,用于存储服务器上每个可用网页的名称。 然后,您的客户端应用程序可以查询此应用程序并比完整页面请求更快地响应,并且每次文件不存在时都不会抛出404错误。