この奇妙な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>