概括:
我正在使用Hangfire以设定的时间间隔处理正在运行的后台作业,例如每晚检查过期的小部件。我想知道从正在运行的作业中访问 ASP.NET Web Api 2 端点(可能只是 GET 和 POST)的最佳方法。
东西的版本(如果这很重要)
- .NET 4.5 MVC 5
- 网络 API 2(.1?)
- 托管站点 Windows azure
- 8GB RAM见脚注 (1)
- 使用 IIS express 的本地开发人员(或 VS2013 中的任何内置开发人员)
我的具体问题
- 这个实现是从后台任务之类的东西打开/关闭到我的 api 的连接的正确方法吗?
- 在下面的代码中,如何动态获取 client.BaseAddress 字符串(http://whatever.xxx)?能够像我在第二个伪代码片段中那样做一些事情会非常方便。
这是我从这篇博文中得到的代码
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:只是在开玩笑,只是想看看我是否可以让读取的声音大声'wtf'。成功请告知