0

我有一個RESTful Web API,它可以正常運行,因爲我可以使用Fiddler進行測試。我看到電話正在通過,我看到回覆。Web API調用不返回

我正在開發一款平板電腦應用程序,需要使用Web API才能在存儲庫中獲取數據或進行更新。

我的電話不會返回,並且在提琴手中沒有任何一個跟蹤顯示我的電話甚至到達服務器。

我需要做的第一個調用是登錄。該URI是這樣的:

http://localhost:53060/api/user

此調用通常會返回有關用戶的一些信息(如組成員身份,授權級別等)。 Web API使用Windows身份驗證,因此存儲庫能夠根據傳入的憑據解析所有這些字段。正如我所說的,在Fiddler中,我看到了對URI進行的三個調用,因爲身份驗證是在調用者和服務器之間協商的。第三次調用返回一個JSON對象,該對象包含所有從存儲庫生成的信息。現在

,移動到我的客戶,我有以下:

var webApiClient = new HttpClient(new HttpClientHandler() 
            { 
            UseDefaultCredentials = true 
            }) 
        { 
         BaseAddress = new Uri("http://localhost:53060/") 
        }; 

webApiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = await webApiClient.GetAsync("api/user"); 
var userLoginInfo = await response.Content.ReadAsAsync<UserLoginInformation>(); 

我呼籲「GetAsync」永遠不會返回,就像我說的,我看到提琴手沒有它的蹤影。

任何想法我做錯了什麼?

TIA, 埃德

+1

即使在模擬器中,平板電腦上的Localhost也不起作用。您需要使用機器名稱或IP進行測試。 – Nkosi

+0

@Nkosi我不認爲這是因爲我已經看到它在Pluralsight的Jesse Liberty視頻中工作。他構建了一個Windows應用商店應用程序,並且在專門用於遠程數據的細分市場中,他構建了一個Web API,將數據提供給他的WinStore應用程序。他使用平板模擬器來演示訪問。他訪問Web API,將BaseAddress設置爲「http:// localhost:33263」。他不使用Windows身份驗證。那將是我所做的和他所做的之間的唯一區別。你是否說「localhost」在集成Windows身份驗證中不起作用?我會試一試 – Eddie

+0

@Nkosi你可能一直都是對的。我將IIS Express配置爲使用IP地址公開我的Web API,現在我可以看到至少有一個HTTP GET經歷了。它產生401.在Fiddler中,一旦我檢查「自動驗證」複選框,有三個請求會通過身份驗證協商。最後一個返回所需的HTTP結果200.我必須弄清楚如何讓我的客戶端自動進行身份驗證。 – Eddie

回答

0

更改在Web API暴露的URL似乎已經解決了這一問題。感謝@Nkosi的建議。 對於任何人陷入這個問題並自問如何更改Web API的URL,有兩種方法。如果模擬器與Web API在同一臺計算機上運行,​​則必須在IIS Express的「applicationhost.config」文件中進行更改。您可以通過右鍵單擊通知區域(右下角)中的IIS Express圖標並選擇顯示所有網站來找到該文件。突出顯示所需的Web API,它將顯示應用程序主機配置文件的位置。在那裏,人們需要找到以下部分:

<bindings> 
    <binding protocol="http" bindingInformation="*:53060:localhost" /> 
</bindings> 

,並在Web API正在運行的機器的IP地址替換「localhost」的名稱。

但是,一旦您開始使用真實設備測試平板電腦應用程序,此方法將無法使用。必須強制IIS Express將Web API公開給外部世界。我發現了一個極好的node.js包,可以幫助解決這個問題。它被稱爲IISExpress-proxy