2011-07-14 13 views
3

特定のURLが匿名で利用可能かどうかを判断する方法を作成したいと考えています。私はカスタム検索ページからアクセスできない結果を取り除くためにこれをやっています。私が思いつく最高のものは、C#のURLから401応答を効率的にチェックする方法はありますか?

public bool IsWebAddressAccessible(string Url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 
     try 
     { 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     } 
     catch (System.Net.WebException) 
     { 
      return false; 
     } 
     return true; 
    } 

ですが、これはいくつかの理由から理想的ではありません。まず、私が理解するように、このような方法でロジックの例外に頼るのは効率的ではありません。第2に、ページがアクセス可能な場合には、ページ全体を検索するように見えるため、時間がかかる。したがって、質問は次のとおりです。

  1. 例外に頼ることなくこれを行う方法はありますか?
  2. これをスピードアップして、ページ全体を取得するのを待たずに応答が401として戻ってくるかどうかを確認する方法はありますか?
+0

確認するには、可能であればHTTPを処理するための組み込みの.NETクラスを使用したいので、IEプロキシ設定などの自動使用を維持しますか?通常のリクエスト、クッキー、POSTデータなどはありませんか? –

+0

これは、現在のプロキシ設定を使用した基本的なリクエストです。リクエストに特別なものは何も送信されていません。私がしたいのは、応答が401対ページのデータを返すかどうかだけです。 – dpsla

答えて

2

質問2のヘルプについては、HEADリクエストのみを実行できます。実際には完全な議論のために、この記事を参照してください: WebRequest "HEAD" light weight alternative

+0

ソートに値するシステム管理者は、HEAD要求を無効にします –

1
  1. これはHttpWebRequestのの設計でvexing exceptionある

    request.Method = "HEAD"; 
    

    EDITを試みる前にこれを挿入します。

    [DebuggerNonUserCode] 
    public static HttpWebResponse GetHttpResponse(this HttpWebRequest request) { 
        // We know the response will be a HttpWebResponse because the request is a HttpWebRequest 
        return (HttpWebResponse)request.GetResponse(); 
    } 
    
    [DebuggerNonUserCode] 
    public static HttpWebResponse GetHttpResponseAvoidVexingExceptions(this HttpWebRequest request) { 
        try { 
         return GetHttpResponse(request); 
        } catch (WebException ex) { 
         HttpWebResponse response = (HttpWebResponse)ex.Response; 
         switch (response.StatusCode) { 
          case HttpStatusCode.NotModified: 
           return response; 
    
          default: 
           // We don't catch other exceptions 
           throw; 
         } 
        } 
    } 
    

    私は避けるの承知している方法はありません:私は実際に私のプロジェクトの一つに(変更されていない304を返すことが期待されている要求の多くを作る1)を拡張メソッドのカップルを持っていますこの例外。

  2. マークと同様に、HEADメソッドを使用すると、応答ヘッダーのみが返されます。
+0

注:例外がスローされた場合、デバッガは有用な場所、つまり要求が行われている場所で破損し、ヘルパーではないように 'DebuggerNonUserCode'がここで使用されます方法 – configurator

関連する問題