2017/8/26

WebRequest Header Authorization 驗證

好久沒有寫開發相關的紀錄,可不是因為程式寫的比較少,只是確實也沒有寫太多新的程式。最近用到 WebRequest 授權及 json post 就小小記錄一下,之後要再用才不會又想不起來到什麼地方找。


var req = (HttpWebRequest)WebRequest.Create("網址");
// 下面二行是驗證
req.PreAuthenticate = true;
req.Headers.Add("Authorization", "驗證字串");
// 表示送出的是 json 格式
req.ContentType = "application/json";
// 用 POST 方式
req.Method = "POST";

using (var streamWriter = new StreamWriter(req.GetRequestStream()))
{
    // 下面是 name value pair 的 json
    string json = "{\"para1\":\"value1\"," + "\"para2\":\"value2\"}";
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}
var httpResponse = (HttpWebResponse)req.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}


下面這個是用 Web Client 的方式,不過記錄的是用 NameValueCollection 來傳送
using (WebClient wc = new WebClient())
{
    wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
    // 下面是驗證
    wc.Headers.Add(HttpRequestHeader.Authorization, "驗證字串");
    // 下面是參數
    NameValueCollection apiParameters = new NameValueCollection();
    apiParameters["para1"] = "value1";
    apiParameters["para2"] = "value2";
    // 用 UploadValues 方式 Post 送出
    byte[] jsonByte = wc.UploadValues(網址, "POST", apiParameters);
    string result = Encoding.UTF8.GetString(jsonByte);
}

如果讀回來是 json 格式,用 Newtonsoft.Json deserialize 後就可以使用了
dynamic jLog = JsonConvert.DeserializeObject(@result);


雖然記錄的是很簡單的,但因為也不是很常用,所以記錄一下。

沒有留言: