所以我继续追踪这个奇怪的WebApi问题。
我们的生产环境如下, 2个Windows 2012服务器,IIS 8.5位于负载均衡器后面。
我得到了一个很好的成功字符串。
但是当使用服务器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>
答案 0 :(得分:0)
我们必须做些事来解决这个问题。
1 - 在IIS中的绑定下,我们在主机名部分为端口80的所有可用ip(在服务器上)添加了服务器名称。