0

概括:

我正在使用Hangfire以设定的时间间隔处理正在运行的后台作业,例如每晚检查过期的小部件。我想知道从正在运行的作业中访问 ASP.NET Web Api 2 端点(可能只是 GET 和 POST)的最佳方法。

东西的版本(如果这很重要)

  • .NET 4.5 MVC 5
  • 网络 API 2(.1?)
  • 托管站点 Windows azure
  • 8GB RAM见脚注 (1)
  • 使用 IIS express 的本地开发人员(或 VS2013 中的任何内置开发人员)

我的具体问题

  1. 这个实现是从后台任务之类的东西打开/关闭到我的 api 的连接的正确方法吗?
  2. 在下面的代码中,如何动态获取 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'。成功请告知

4

0 回答 0