簡體   English   中英

在IIS 7.5上對WebApi服務進行HttpClient調用-找不到404

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM