在我们的应用中产生某种联机帮助。 它的工作原理很简单:如果用户点击帮助按钮的URL是构建取决于当前的语言和帮助上下文(如“ http://example.com/help/ ” + [LANG_ID] +“[HELP_CONTEXT])和所谓的在浏览器中。
所以我的问题是:如何检查文件是否存在,在Web服务器上,而无需加载完整的文件内容?
谢谢你的帮助!
更新:感谢您的帮助。 我的问题已经有了答案。 现在我们代理的认证问题的一个不能发送HTTP请求;)
在我们的应用中产生某种联机帮助。 它的工作原理很简单:如果用户点击帮助按钮的URL是构建取决于当前的语言和帮助上下文(如“ http://example.com/help/ ” + [LANG_ID] +“[HELP_CONTEXT])和所谓的在浏览器中。
所以我的问题是:如何检查文件是否存在,在Web服务器上,而无需加载完整的文件内容?
谢谢你的帮助!
更新:感谢您的帮助。 我的问题已经有了答案。 现在我们代理的认证问题的一个不能发送HTTP请求;)
您可以使用.NET做一个HEAD请求,然后看看响应的状态。
你的代码看起来像这样(改编自卑微的HTTP HEAD请求 ):
// 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相结合的方法对文件的路径,以确认该文件存在。
发送的网址(而不是GET)HEAD请求。 服务器将返回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错误。
有同样的问题我自己,发现了这个问题,这里的答案非常有用。
但这里的答案,使用旧的WebRequest类是有点过时,它对于初学者没有异步支持。 所以我想用用做它的更现代的方式HttpClient的 。 这里是一个小的辅助类为例来检查文件是否存在:
using System.Net.Http;
using System.Threading.Tasks;
class HttpClientHelper
{
private static HttpClient _httpClient;
public static async Task<bool> DoesFileExist(string url)
{
if (_httpClient == null)
{
_httpClient = new HttpClient();
}
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, url))
{
using (HttpResponseMessage response = await _httpClient.SendAsync(request))
{
return response.StatusCode == System.Net.HttpStatusCode.OK;
}
}
}
}
用法:
if (await HttpClientHelper.DoesFileExist("https://www.google.com/favicon.ico"))
{
// Yes it does!
}
else
{
// No it doesn't!
}