概要:
Hangfireを使用して、毎晩期限切れのウィジェットをチェックするなど、設定された間隔で実行中のバックグラウンド ジョブを処理しています。実行中のジョブから ASP.NET Web Api 2 エンドポイント (おそらく GET と POST) にヒットする最良の方法を知りたいです。
もののバージョン(これが重要な場合)
- .NET 4.5 MVC 5
- Web API 2(.1?)
- ホスティング サイト Windows azure
- 8 GB の RAM脚注 (1) を参照
- IISエクスプレスを使用したローカル開発者(またはVS2013に組み込まれているものは何でも)
私の具体的な質問
- この実装は、バックグラウンド タスクのようなものから API への接続を開閉する適切な方法ですか?
- 以下のコードで、client.BaseAddress 文字列 ( http://whatever.xxx ) を動的に取得するにはどうすればよいですか? 2 番目の疑似コード スニペットにあるようなことができれば、非常に便利です。
このブログ投稿から取得したコードは次のとおりです
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:43736/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// HTTP GET
HttpResponseMessage response = await client.GetAsync("api/do/someshiz/");
if (!response.IsSuccessStatusCode)
{
//todo: stuff
}
}
これはすでにかなりきれいだと思いますが、私は HttpClient クラスの使用にひどく慣れておらず、ほとんどの API インタラクションは JavaScript からのものです。
HttpClient.BaseAddress 文字列を取得するためにやりたいこと
if(IAmRunningThisOnMyLocalMachine) {
baseAddress = "http://localhost:1337/"
} else {
//I Already have a way to determine if I am on the staging server or live site
if(IsStagingServer){
// staging server base address
baseAddress = "http://staging.whatever.com/"
} else {
// live base address
baseAddress = "http://whatever.com/"
}
}
ルートの else ブランチの場合、それは大したことではなく、これらの文字列は多かれ少なかれ一定です。ローカルで実行しているときは、localhost:AnyPort であるか、IIS Express の他のバリエーションであるかに関係なく、動作させたいと考えています。
1: Just kidding about the RAM, just wanted to see if I could make the read whisper 'wtf' out loud. Please advise if successful