是否存在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内容类型作为自定义错误页返回。

是否存在web文件-使用相同的函数获取内容类型

有两种可能的"不存在"场景。当URL中的服务器名称不正确,因此请求甚至无法发送时,听起来你已经识别了其中一个。

但你没有考虑到另一个错误——你可以访问远程服务器,但它否认了对特定文件的所有了解。对于这种情况,您应该检查response上的状态404

为了更干净地处理当前场景(服务器不存在),您可以使用Uri类从uri字符串中提取Host名称,并执行手动DNS查找-这将允许您为这种可能的场景进行编码,而不必捕获异常-当这是预期场景时,通常不赞成这样做。