从HTTPClient

时间:2016-07-28 15:08:33

标签: c# asp.net-web-api

所以我继续追踪这个奇怪的WebApi问题。

我们的生产环境如下, 2个Windows 2012服务器,IIS 8.5位于负载均衡器后面。

当我直接点击网站时,http://MyServer/ApiToHit/api/Values?samAccountName=someAccount&success=True&permissionName=MyPermission

我得到了一个很好的成功字符串。

但是当使用服务器1上指向服务器1上的api的httpclient页面命中它时,我得到一个404错误页面。如果我将链接更改为服务器2,它将完美运行。

HTTP错误404.找不到请求的资源。

HttpClient代码

using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


                var values = HttpUtility.UrlDecode(string.Format(
                    CultureInfo.InvariantCulture, ConfigurationManager.AppSettings["PathToParameters"].ToString(),
                    "someAccount".ToUpper(CultureInfo.InvariantCulture),
                    true.ToString(),
                    "MyPermission".ToUpper(CultureInfo.InvariantCulture)));

                lblResult.Text = string.Empty;

                var newUrl = new Uri(ConfigurationManager.AppSettings["Url"].ToString() + values);

                // HTTP GET
                var response = await client.GetAsync(newUrl, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
                //var response = await client.GetAsync(values, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
                this.lblResult.Text = await response.Content.ReadAsStringAsync();
            }

这里是有问题的api(缩写为问题)

[Authorize]
public class ValuesController : ApiController
{
    public string Get(string samAccountName, bool success, string permissionName)
    {
        var returnValue = "Success";

        return returnValue;
    }

}

路线

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

}

我们尝试使用

更改web.config
<modules runAllManagedModulesForAllRequests="true"/>

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>

1 个答案:

答案 0 :(得分:0)

我们必须做些事来解决这个问题。

1 - 在IIS中的绑定下,我们在主机名部分为端口80的所有可用ip(在服务器上)添加了服务器名称。