• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
皇图霸业谈笑间
更高、更快、更强
博客园    首页    新随笔    联系   管理    订阅  订阅
健壮的函数验证
public ValidateResult Validate(
      bool useHeadMethod = true,
      bool enableKeepAlive = false,
      int timeoutSeconds = 30 )
{
    ValidateResult result = new ValidateResult();
 
    HttpWebRequest request = WebRequest.Create(Uri)
                                  as HttpWebRequest;
    if (useHeadMethod)
    {
        request.Method = "HEAD";
    }
    else
    {
        request.Method = "GET";
    }
 
    // always compress, if you get back a 404 from a HEAD
    //     it can be quite big.
    request.AutomaticDecompression = DecompressionMethods.GZip;
    request.AllowAutoRedirect = false;
    request.UserAgent = UserAgentString;
    request.Timeout = timeoutSeconds * 1000;
    request.KeepAlive = enableKeepAlive;
 
    HttpWebResponse response = null;
    try
    {
        response = request.GetResponse() as HttpWebResponse;
 
        result.StatusCode = response.StatusCode;
        if (response.StatusCode ==
                   HttpStatusCode.Redirect ||
            response.StatusCode ==
                   HttpStatusCode.MovedPermanently ||
            response.StatusCode ==
                   HttpStatusCode.SeeOther ||
            response.StatusCode ==
                   HttpStatusCode.TemporaryRedirect)
        {
            try
            {
                Uri targetUri =
                  new Uri(Uri, response.Headers["Location"]);
                var scheme = targetUri.Scheme.ToLower();
                if (scheme == "http" || scheme == "https")
                {
                    result.RedirectResult =
                        new ExternalUrl(targetUri);
                }
                else
                {
                    // this little gem was born out of
                    //   http://tinyurl.com/18r
                    //   redirecting to about:blank
                    result.StatusCode =
                           HttpStatusCode.SwitchingProtocols;
                    result.WebExceptionStatus = null;
                }
            }
            catch (UriFormatException)
            {
                // another gem ... people sometimes redirect to
                //    http://nonsense:port/yay
                result.StatusCode =
                    HttpStatusCode.SwitchingProtocols;
                result.WebExceptionStatus =
                    WebExceptionStatus.NameResolutionFailure;
            }
 
        }


 

 

参考文章:  

http://blog.jobbole.com/22288/

 

posted on 2012-09-06 13:02  布颜书  阅读(208)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3