[英]HttpClient Call to WebApi Service on IIS 7.5 - 404 Not Found
我是WebApi的新手,我們需要創建\\維護令牌發布Web服務。 我的一位同事提供了他允許我使用的解決方案(測試版)。 如果我在開發環境(VS 2012)中運行Web服務,則可以對其進行查詢並從Web瀏覽器(Chrome)獲取令牌。 然后,我編寫了一個測試應用程序,以使用HttpClient查詢服務並獲取令牌。 這在我的開發環境中托管的服務中很好用,但是如果我使用我的小型測試應用程序在IIS中托管時嘗試查詢它,則會收到“ 404 Not Found”異常。 但是令我感到困惑的是,如果我從chrome連接到IIS托管的Web服務,它可以工作嗎?
我的控制器方法如下:
[HttpGet]
public IHttpActionResult GetToken(string username, string password, string realm)
{
return Json("TOKEN-STRING");
}
而我的配置:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
</handlers>
我已在IIS中將應用程序池設置為“集成”。
我的邏輯對我說,如果我能夠從Chrome而不是從我的應用程序檢索令牌,則IIS應該沒有問題,而在我的應用程序中是config \\ setting \\ programming錯誤。
這是我編寫的用於獲取令牌的小方法:
async private void GetToken()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost/TokenServer/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync("/api/TokenServer/GetToken/name/password/realm").Result;
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
//Error handling
return;
}
//Extract token from response
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Token = DeserializeJsonToken(result);
}
我已經閱讀並嘗試了許多建議,但似乎沒有一個對我有用。 我已經堅持了兩天,截止日期越來越短:)
TX
這里的問題是Url,其中您有一個前導/
,這導致不考慮基地址Url的TokenServer
部分。 因此,如下修改呼叫:
client.GetAsync("api/TokenServer/GetToken/name/password/realm").Result;
提示:在這種情況下,像Fiddler這樣的工具會很有用。 它有助於診斷發送到服務的原始請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.