Asp.net ASP..NET:检查url是否可访问或存在

Asp.net ASP..NET:检查url是否可访问或存在,asp.net,Asp.net,我有一个检查URL是否存在的函数 private bool UrlExists(string url){ try { var request = WebRequest.Create(url) as HttpWebRequest; if (request == null) return false; request.Method = "HEAD"; using (var response = (HttpWebResponse)request.GetResponse(

我有一个检查URL是否存在的函数

private bool UrlExists(string url){
try
{
    var request = WebRequest.Create(url) as HttpWebRequest;
    if (request == null) return false;
    request.Method = "HEAD";
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        return response.StatusCode == HttpStatusCode.OK;
    }
}
catch (UriFormatException uriException)
{
    //Invalid Url
    Log.Error(this, uriException.Message);
    return false;
}
catch (WebException webException)
{
    //Unable to access url
    Log.Error(this, webException.Message);
    return false;
}
catch (Exception ex) {
    Log.Error(this, ex.Message);
    return false;
}}
但它并没有像我期望的那样起作用

一些URL可以工作,比如stackoverflow,一些本地URL,。。 但是对于我部署到staging的特殊站点,我可以打开它,但是方法会给出异常,因为
远程服务器返回了一个错误:(500)内部服务器错误。

我的方法有什么问题?测试URL是否存在的最佳解决方案是什么

p、 s:我还尝试使用另一种方法来检查URL是否可访问,但它对该URL也不起作用

private async Task<bool> UrlIsReachable(string url){
try
{
    using (var client = new HttpClient())
    {
        //var response = await client.GetAsync(url);
        var httpRequestMsg = new HttpRequestMessage(HttpMethod.Head, url);
        var response = await client.SendAsync(httpRequestMsg);
        return (response.StatusCode == HttpStatusCode.OK || response.IsSuccessStatusCode);
    }
}
catch (Exception ex)
{
    Log.Error(this, ex.Message);
    return false;
}}
专用异步任务URLISREACABLE(字符串url){
尝试
{
使用(var client=new HttpClient())
{
//var response=wait client.GetAsync(url);
var httpRequestMsg=新的HttpRequestMessage(HttpMethod.Head,url);
var response=await client.sendaync(httpRequestMsg);
返回(response.StatusCode==HttpStatusCode.OK | | response.issucessStatuscode);
}
}
捕获(例外情况除外)
{
日志错误(此,例如消息);
返回false;
}}

提前感谢。

只有本地URL不起作用吗?如果您的URL为500,则该URL存在,问题是远程处理该URL的任何程序都会抛出错误,而不是返回页面。(非常)基本上,除非您得到404(未找到)错误,否则URL可能存在。如果您得到其他响应(例如重定向),可能会有一些微妙之处—是否将重定向的URL定义为“现有”取决于您自己。同样,如果您收到身份验证质询(例如401),除非您可以进行身份验证,然后再发出另一个请求,您无法确定其背后的URL是否存在。查看可能的响应代码列表并决定如何处理和分类每种可能性可能会很有用。如果我尝试请求->它不起作用。但是如果我尝试一个指定的url->它可以工作,我认为你的方法很好…只是不要寻找200返回码。相反,请检查返回代码是否为404,是否是唯一不工作的URL本地URL?如果您的URL为500,则该URL存在,问题是远程端处理该URL的任何程序都会抛出一个错误,而不是返回页面。(非常)基本上,除非您得到404(未找到)错误,否则URL可能存在。如果您得到其他响应(例如重定向),可能会有一些微妙之处—是否将重定向的URL定义为“现有”取决于您自己。同样,如果您收到身份验证质询(例如401),除非您可以进行身份验证,然后再发出另一个请求,您无法确定其背后的URL是否存在。查看可能的响应代码列表并决定如何处理和分类每种可能性可能会很有用。如果我尝试请求->它不起作用。但是如果我尝试一个指定的url->它可以工作,我认为你的方法很好…只是不要寻找200返回码。而是检查返回代码是否不是404