2011年9月29日 星期四

取得 HttpWebRequest 的 404 狀態

在使用 HttpWebRequest 時我們常常會依 HttpStatus 是否為 200 判斷正常與否…
取得 HttpStatusCode 的方式通常是從 HttpWebRequest 中再取出 HttpWebResponse

取得了 HttpWebResponse 後再取得 StatusCode property
但取得 HttpWebResponse 是有風險的…
例如該 URL 是 404 的狀態…合理的來講根本就沒有 Response
這時再做 HttpWebRequest.EndGetResponse 的動作就會發生 Exception
所以若要得到像 404 這類無 Response 的 StatusCode 無法單從 WebResponse 來判斷…
必須利用 WebException 來取得…
以下是一個簡單的範例…可以取得正確的 StatusCode


private void GetResponseCallback(IAsyncResult asynchronousResult)
{
    RequestState requestState = (RequestState)asynchronousResult.AsyncState;
    HttpWebRequest request = requestState.request;

    try
    {
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();

        // 這裡可以取得 200 之類合法的 Response HttpStatusCode
        HttpStatusCode status = response.StatusCode;
    }
    catch (WebException wexp)
    {
        HttpWebResponse response = (HttpWebResponse)wexp.Response;

        // 這裡可以取得 404 之類無法取得 Server Response 的 HttpStatusCode
        HttpStatusCode status =  response.StatusCode;
    }
    catch (Exception excp)
    {
    }
}

沒有留言:

張貼留言