是否存在web文件-使用相同的函数获取内容类型
本文关键字:函数 获取 类型 web 存在 文件 是否 | 更新日期: 2023-09-27 18:26:22
我有一个函数,它被编码为获取web文件的Content-Type
。
以下是功能:
public string GetContentTypeOfUri(string uri)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "HEAD";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var contentType = response.Headers["Content-Type"];
return (contentType);
}
}
catch (Exception ex)
{
return "error";
}
}
与其编写一个完全不同的函数来检测web文件是否存在,我如何根据用于获取Content-Type
的相同代码来计算文件是否存在?
如果我使用了一个不存在的文件的uri,就会发生异常。发生此异常时,例如HResult等于-2146233079,并显示消息="无法解析远程名称:'[address-name]'"。
可以肯定地说,当发生异常,并且ex.HResult等于-2146223079时,该文件不存在吗?
有没有更简单/更好的方法来解决这个问题?
提前感谢
编辑
这是我的HttpClient
代码:
public async Task<string> GetContentTypeAsync(string uri)
{
using (var httpClient = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Method = new HttpMethod("HEAD");
var response = await httpClient.SendAsync(request);
string contentType = response.Content.Headers.ContentType.ToString();
return contentType;
}
}
但是,如果我有一个不存在的网址,例如http://www.usa.canon.com/app/html/HDV/HG10/images/hg10_sample_image_03.jpg5,我得到的StatusCode为OK,因为Text内容类型作为自定义错误页返回。
有两种可能的"不存在"场景。当URL中的服务器名称不正确,因此请求甚至无法发送时,听起来你已经识别了其中一个。
但你没有考虑到另一个错误——你可以访问远程服务器,但它否认了对特定文件的所有了解。对于这种情况,您应该检查response
上的状态404
。
为了更干净地处理当前场景(服务器不存在),您可以使用Uri
类从uri
字符串中提取Host
名称,并执行手动DNS查找-这将允许您为这种可能的场景进行编码,而不必捕获异常-当这是预期场景时,通常不赞成这样做。