2016-07-28 9 views
0

この奇妙なWebApiの問題を追跡するために、私は佐賀を続けます。HTTPClientから呼び出されたときにwebapiコールで404を取得する

本稼働環境は、次のとおりです。 ロードバランサの後ろにIIS 8.5を搭載した2台のWindows 2012サーバー。 http://MyServer/ApiToHit/api/Values?samAccountName=someAccount&success=True&permissionName=MyPermission

私は直接サイトをヒット

は、私は素晴らしい成功の文字列を取得します。

しかし、サーバ1上のapiを指し示すサーバ1上の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(); 
      } 

ここで我々は

でweb.configファイルを変更しようとした

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 } 
    ); 

} 

(質問のために短縮)問題のAPI

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

     return returnValue; 
    } 

} 

ルートです

<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> 

答えて

0

我々はこの問題を解決するために、物事をしなければなりませんでした。

1 - IISのバインディングの下で​​、ポート80のすべての使用可能なIP(サーバー上)のホスト名セクションにサーバー名を追加しました。

関連する問題