「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
.NETクライアントからHTTPリクエストを送る場合、
従来は、
使用していたが、こちらは設計が古いもよう。
新しくは、.NET Framework 4.5 では BCL 入りした
System.Net.Http.dllのHttpClientクラスを使用する。
なお、JavaScriptからは、jQuery.ajax()を使用する。
.NET Framework 4.5 で BCL 入りした、高機能で使い勝手がいいAPI。
以下のHttpClient?によるPOSTのサンプル・スニペットを使用すれば色々なパターンを処理可能。
// HttpClient private static HttpClient _httpClient = new HttpClient();
// HttpRequestMessage (Method & RequestUri)
httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("http://localhost/・・・",
};
// HttpRequestMessage (Headers & Content)
httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(
string.Format("{0}:{1}", "・・・", "・・・"))));
httpRequestMessage.Content = new FormUrlEncodedContent(
new Dictionary<string, string>
{
{ "grant_type", "authorization_code" },
{ "code", code },
{ "redirect_uri", System.Web.HttpUtility.HtmlEncode(
"http://localhost/・・・") },
});
// HttpResponseMessage
httpResponseMessage = await _httpClient.SendAsync(httpRequestMessage);
response = await httpResponseMessage.Content.ReadAsStringAsync();
dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(response);
GETについては、上記コードの
でイケる。と思う。
JSONのPOSTについては、
上記コードのhttpRequestMessage?.Content プロパティにJSON文字列を指定する。
でイケる。と思う。
ちょっとコツがあった(以下のような感じ)。
httpRequestMessage.Content = new StringContent(
JsonConvert.SerializeObject(new
{
language = "ja"
}),
Encoding.UTF8, "application/json");
以下が参考になる。
.NETでHTTPリクエストを処理するための最古のAPI。
以下が参考になる。
SilverlightがSOAPサーバーと通信するケースが増えたため、追加されたAPI。
以下が参考になる。
HTTPリクエストを使用してデータを取得するajax の最も低レベルな実装。
以下の様なメソッドも存在する。
以下のjQuery.ajaxによるPOSTのサンプル・スニペットを使用すれば色々なパターンを処理可能。
$('#btnTest').click(function () {
$.ajax({
type: 'post',
url: 'http://・・・',
crossDomain: true,
contentType: 'application/x-www-form-urlencoded',
headers: {
'Authorization': 'Bearer ' + token
},
data: {
client_id: '・・・',
client_secret: '・・・',
},
xhrFields: {
withCredentials: true
},
success: function (responseData, textStatus, jqXHR) {
alert(textStatus + ', ' + responseData);
},
error: function (responseData, textStatus, errorThrown) {
alert(textStatus + ', ' + errorThrown.message);
}
});
});
上記を、GETもイケるよう、改造した。
urlに'get'を、postdataにはnullを指定する。
function CallOAuthAPI(url, httpMethod, postdata) {
$.ajax({
type: httpMethod,
url: url,
crossDomain: true,
headers: {
'Authorization': 'Bearer ' + token
},
data: postdata,
xhrFields: {
withCredentials: true
},
success: function (responseData, textStatus, jqXHR) {
alert(textStatus + ', ' + responseData);
},
error: function (responseData, textStatus, errorThrown) {
alert(textStatus + ', ' + errorThrown.message);
}
});
}
以下は、Web Storageからkey, valueをJSONでPOSTする例。
JSON文字列へのシリアライズ処理にはJSON.stringify()を使用する
// ---------------------------------------------------------------
// Web Storageからkey, valueをJSONでPOSTする。
// ---------------------------------------------------------------
// 引数 url : POST先のURL
// 戻り値 -
// ---------------------------------------------------------------
function PostJsonWebStorage(url) {
// Web Storageのすべての情報の取得
var jsonArray = new Array();
for (var i = 0; i < storage.length; i++) {
var _key = storage.key(i);
// Web Storageのキーと値を表示
var jsonBean = {
key: _key,
value: storage.getItem(_key)
};
jsonArray.push(jsonBean);
}
// <p id="url"></p> に表示
if (document.getElementById("url") != null) {
$("#url").text(url);
}
// <p id="request"></p> に表示
if (document.getElementById("request") != null) {
$("#request").text("request:" + JSON.stringify(jsonArray).toString());
}
CallService("POST", url, JSON.stringify(jsonArray), "application/json; charset=utf-8", "JSON", false);
}
// ---------------------------------------------------------------
// ajax
// ---------------------------------------------------------------
// 引数
// Type : GET or POST or PUT or DELETE verb
// Url : Location of the service
// Data : Data sent to server
// ContentType : Content type sent to server
// DataType : Expected data format from server
// ProcessData : True or False
// 戻り値 -
// ---------------------------------------------------------------
function CallService(Type, Url, Data, ContentType, DataType, ProcessData) {
$.ajax({
type: Type,
url: Url,
data: Data,
cache: false,
contentType: ContentType,
dataType: DataType,
processdata: ProcessData,
success: function (data) {
// On Successfull service call
ServiceSucceeded(data);
},
error: function (data) {
// When Service call fails
ServiceFailed(data);
}
});
}
Tags: :.NET開発, :.NET Core, :.NET Standard, :ASP.NET, :ASP.NET Web API