2017-09-02 117 views
3

我從xamarin表單應用程序中獲取WEB.API。在.Net Web API中創建Web API。但我得到錯誤從ASP.Net Web Api中獲取數據時獲取403狀態

{StatusCode: 403, ReasonPhrase: 'ModSecurity Action', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
Server: Microsoft-IIS/8.5 
X-Powered-By: ASP.NET 
X-Powered-By-Plesk: PleskWin 
Date: Sat, 02 Sep 2017 07:59:38 GMT 
Content-Type: text/html 
Content-Length: 2684 
}} 

相同的URL從瀏覽器和郵遞員也給予適當的輸出。 我正在使用下面的代碼來獲取網頁API。我沒有得到確切的發生。

string RestUrl = "http://msystemtest.msystem.co/api/Users?userId={0}&pass={1}"; 

      var uri = new Uri(string.Format(RestUrl, uid, pass)); 
      string resp = string.Empty; 

      var response = await client.GetAsync(uri); 

      string statHold = string.Empty; 
      if(response.IsSuccessStatusCode) 
      { 
       var content = await response.Content.ReadAsStringAsync(); 
       resp = JsonConvert.DeserializeObject<string>(content); 
      } 

如果「http://msystemtest.msystem.co/api/Users?userId=test&pass=1」這個URL直接從瀏覽器和郵遞員其給予適當的輸出運行。

+0

你檢查過'uri'結果嗎?也許格式有錯誤的輸入參數 – Stefan

+0

格式是正確的。我已經直接測試了URI結果。它的工作正常。 –

回答

1

似乎服務器不喜歡你從非瀏覽器閱讀此內容。這裏是從控制檯應用程序中模擬瀏覽器的代碼:

using System; 
using System.Net.Http; 
namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var httpClient = new HttpClient()) 
      { 
       httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json"); 
       httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"); 

       var response = httpClient.GetAsync("http://msystemtest.msystem.co/api/Users?userId=test&pass=1").Result; 
       Console.WriteLine(response.Content.ReadAsStringAsync().Result); 
       Console.ReadKey(); 
      } 
     } 
    } 
} 
+0

它從控制檯應用程序工作正常。但是當我嘗試從Xamarin Forms應用程序實現時,它的狀態是相同的。 –

+0

嘗試使用fiddler檢查Xamarin Forms應用程序是否覆蓋用戶代理標題 – devzero

+0

通過代碼中的輕微更改可以很好地工作。感謝您的協助。 –