目的
C#でHTTP通信を行い、その結果を取得したいと思っています。
(最終的にはWeb APIを叩くことが目的です)
資料となるサイトを参考にコードを書いてみたのですが応答が返らず、対処方法が分からないので教えていただきたいです。
実装
まっさらなC#/Formsアプリに、ボタンを一つだけ用意します。
ボタンを押すとWebアクセスを試みるだけのプログラムです。
[フォーム側(ボタンを押すとアクセス)]
C#
1 public partial class MainWindow : Form 2 { 3 public MainWindow() 4 { 5 InitializeComponent(); 6 } 7 8 private void btnRequest_Click(object sender, EventArgs e) 9 { 10 Uri uri = new Uri("http://www.google.com"); 11 // ここでwebアクセスを行う 12 Task<string> webTask = WebConn.GetApiAsync(uri); 13 string result = webTask.Result; 14 Console.WriteLine(result); 15 } 16 }
[アクセス処理(WebConn)]
C#
1 public class WebConn 2 { 3 public static async Task<string> GetApiAsync(Uri uri) 4 { 5 using (HttpClient client = new HttpClient()) 6 { 7 // ヘッダ情報設定 8 client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"); 9 client.DefaultRequestHeaders.Add("Accept-Language", "ja-JP"); 10 client.Timeout = TimeSpan.FromSeconds(5.0); 11 12 try 13 { 14 // 実際のアクセス処理はここだけ 15 string res = await client.GetStringAsync(uri); 16 // ここに辿りつけない 17 return res; 18 } catch(HttpRequestException e) 19 { 20 // 例外処理(省略) 21 } 22 return null; 23 } 24 } 25 }
発生している問題
上記のコードを実行しフォームに用意したボタンを押したところ、ウィンドウが操作を受け付けない状態になります。
具体的には、上記コード(アクセス処理)の
string res = await client.GetStringAsync(uri);
を実行した後、次の return res;
に辿り着きません。
また、実行時に例外が発生することもありません。
参考資料
@ITの記事
http://www.atmarkit.co.jp/ait/articles/1501/06/news086.html
に掲載されているコードを、ほぼ流用しています。
その他
C#を用いて通信を行うのは初めてです。
もしHttpClient使うより良い方法があれば教えてください。
(ところでteratailでは、C#のコードはシンタックスハイライトされないのでしょうか…?)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/03 14:06
2016/05/04 04:24