2016-07-21 62 views
0

我構建了一個Web Api,它託管在只允許內部訪問的服務器中,並且我有一個客戶端應用程序。我必須在中間建立一些東西來建立這種聯繫。從外部服務器調用內部Web Api

Cliente端< - > SOMETHING < - >網絡API(內部訪問) - >數據庫

我需要什麼建?我是一個begginer,現在我有這個問題。

+0

你需要一個防火牆規則,HTTP代理,或者做了代理的HTTP應用CORS來自其他網站的訪問Web API。 – CodeCaster

+0

@CodeCaster你有一些Web Api代理的例子嗎?謝謝。 –

+0

不需要。您需要一個HTTP代理或知道您的API的HTTP應用程序,並將請求從網絡外部傳輸到內部。真的,防火牆規則將會變得非常容易。 – CodeCaster

回答

0

確保您可以從設備上點擊您的網頁api的網址。簡單的路由就是在您的設備上運行網絡功能示例,並看到您可以使用IsReachable和IsRemoteReachable API訪問服務器。它的Xamarin Forms,不是純粹的Xamarin,但應該讓你看看你是否可以打你的服務器。

https://blogs.msdn.microsoft.com/devfish/2016/06/22/xam-plugins-connectivity-all-apis-sample/

+0

我不知道這可以幫助我。 現在,在我的電腦中進行測試,我可以從我的設備訪問Web Api並且像魅力一樣工作。但是,安全部門告訴我,我不能使用這個結構。 Web Api將託管在只允許內部訪問的服務器中,並且我需要構建另一個Web Api或其他我不知道的,將我的客戶端連接到Web Api(返回)的東西。數據庫僅供Web Api訪問,只允許內部訪問,所以客戶端不會直接連接。 Like a PROXY –

+0

嘗試設置客戶端代理屬性 - https://msdn.microsoft.com/en-us/library/system.net.http.httpclienthandler.proxy(v=vs.118).aspx –

+1

鏈接對於一個潛在的解決方案總是受歡迎的,但請[在鏈接附近添加上下文](// meta.stackoverflow.com/a/8259/169503),以便您的同行用戶可以瞭解它是什麼以及它爲什麼在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。考慮到_僅僅是一個鏈接到外部site_是一個可能的原因,因爲[爲什麼和如何刪除一些答案?](// stackoverflow.com/help/deleted-answers)。 – FrankerZ

0

這裏是一個展示從客戶端應用程序與Web服務GET和POST數據的功能的實現,這將在桌面應用程序的工作(贏表格等)。要使用相同下面的代碼,你必須能夠在網絡API項目

public static async Task UploadAsync(ReadingModel reading) 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://your-api-domain.net/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     // HTTP GET 
     HttpResponseMessage response = await client.GetAsync("api/yourapi"); 
     if (response.IsSuccessStatusCode) 
     { 
      Product product = await response.Content.ReadAsAsync<Product>(); 
      Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); 
     } 

     // HTTP POST 
     try 
     { 
      HttpResponseMessage response = await client.PostAsJsonAsync("api/yourapi", reading); 
      if (response.IsSuccessStatusCode) 
      { 
       // do your stuff 
      } 
     } 
     catch (Exception) 
     { 

     } 

    } 
} 
+0

這是你的嗎?我想隨着一些變化,這是我需要的。 Cors已在Web Api上啓用。 此代碼就像一個代理...我必須在querystring(name,mothername,fathername ...)上傳遞一些參數並返回一個數據集......所以,我使用這部分代碼構建了一個Web Api,那它呢? 看我的代碼在這裏: [鏈接](http://stackoverflow.com/questions/38466307/web-api-calling-another-web-api) –

+0

是的,這是我的,我用它在我的一些項目並且我在這裏展示了我用於幫助您的項目 – Mostafiz

+0

根據需要修改並在您的項目中使用 – Mostafiz