2013-10-18 89 views
37

我想知道如何從另一個ASP.Net Web API中使用WEBAPI來將響應存儲在數據庫中。 我知道如何從像JavaScript,控制檯應用程序等客戶消耗的WebAPI如何從asp.net Web API中使用webApi將結果存儲到數據庫中?

但要求是,這樣使用我的WebAPI我的客戶,結果被我的WebAPI &店拉數據庫中的第三方API的數據要求我提供數據。

是否可以使用Asp.Net Web API執行此操作?

+1

我沒有看到這裏的問題。您的客戶端本身是Web API服務的事實在您如何調用Web API服務方面沒有任何影響。 – Stijn

+0

請接受答案,而不是感謝評論,這樣這個問題將不再是開放的 – OnTheFly

+0

我試過用RestSharp,它是一個更簡單的問題。你可以得到完整的源代碼:https://github.com/garora/somestuff/tree/master/ConsumeWebAPI –

回答

78

在本教程中解釋瞭如何消耗網頁API用C#,在這個例子中一個控制檯應用程序被使用,但您也可以使用另一個網頁API消耗,當然。

http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client

你應該看看HttpClient

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("http://localhost/yourwebapi"); 

確保您的要求使用接受這樣的標題爲JSON響應問:

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

現在來與教程不同的部分,請確保您具有與其他WEB API相同的對象,如果沒有,則您有將對象映射到您自己的對象。 ASP.NET會將您收到的JSON轉換爲您想要的對象。

HttpResponseMessage response = client.GetAsync("api/yourcustomobjects").Result; 
if (response.IsSuccessStatusCode) 
{ 
    var yourcustomobjects = response.Content.ReadAsAsync<IEnumerable<YourCustomObject>>().Result; 
    foreach (var x in yourcustomobjects) 
    { 
     //Call your store method and pass in your own object 
     SaveCustomObjectToDB(x); 
    } 
} 
else 
{ 
    //Something has gone wrong, handle it here 
} 

請注意,我使用.Result作爲例子的情況。您應該考慮在這裏使用asyncawait模式。

+2

感謝您的迴應。 –

+0

我試圖從控制檯應用程序中使用服務,並且成功。我在使用Asp.Net WebApi時遇到了問題。我的查詢是:1.在webApi項目中編寫httpclient程序的地方,因爲程序應該在一天內自動執行一次以更新我的數據庫? 2.是否建議使用像mongo數據庫或任何其他的nomysqldbs,因爲我的答案是JSON對象? –

+0

如果您想每天執行一次,爲什麼還要使用其他Web API?您可以使用控制檯應用程序和Windows計劃任務,每天執行一次。您的數據庫選擇完全取決於其他要求。 –

9

對於一些無法解釋原因,這種解決方案並不爲我工作(的類型也許有些不兼容),所以我想出了自己的解決方案:

HttpResponseMessage response = await client.GetAsync("api/yourcustomobjects"); 
if (response.IsSuccessStatusCode) 
{ 
    var data = await response.Content.ReadAsStringAsync(); 
    var product = JsonConvert.DeserializeObject<Product>(data); 
} 

這樣,我的內容被解析成JSON字符串,然後將其轉換爲我的對象。

+1

,此Soln在添加後工作data.result(而不是數據)在下面一行代碼中 「var product = JsonConvert.DeserializeObject (data);」 – Syed

+0

JsonConvert位於newtonsoft.json包中,從nuget包管理器獲取它:) – AmiNadimi

1
public class EmployeeApiController : ApiController 
{ 
    private readonly IEmployee _employeeRepositary; 

    public EmployeeApiController() 
    { 
     _employeeRepositary = new EmployeeRepositary(); 
    } 

    public async Task<HttpResponseMessage> Create(EmployeeModel Employee) 
    { 
     var returnStatus = await _employeeRepositary.Create(Employee); 
     return Request.CreateResponse(HttpStatusCode.OK, returnStatus); 
    } 
} 

持久性

public async Task<ResponseStatusViewModel> Create(EmployeeModel Employee) 
{  
    var responseStatusViewModel = new ResponseStatusViewModel(); 
    var connection = new SqlConnection(EmployeeConfig.EmployeeConnectionString); 
       var command = new SqlCommand("usp_CreateEmployee", connection); 
       command.CommandType = CommandType.StoredProcedure; 
       var pEmployeeName = new SqlParameter("@EmployeeName", SqlDbType.VarChar, 50); 
       pEmployeeName.Value = Employee.EmployeeName; 
       command.Parameters.Add(pEmployeeName); 


       try 
       { 
        await connection.OpenAsync(); 
        await command.ExecuteNonQueryAsync(); 

        command.Dispose(); 
        connection.Dispose(); 

       } 
       catch (Exception ex) 
       { 

        throw ex; 
       } 
       return responseStatusViewModel; 
      } 

Task<ResponseStatusViewModel> Create(EmployeeModel Employee); 

public class EmployeeConfig 
{ 
    public static string EmployeeConnectionString; 
    private const string EmployeeConnectionStringKey = "EmployeeConnectionString"; 
    public static void InitializeConfig() 
    { 
     EmployeeConnectionString = GetConnectionStringValue(EmployeeConnectionStringKey); 
    } 

    private static string GetConnectionStringValue(string connectionStringName) 
    { 
     return Convert.ToString(ConfigurationManager.ConnectionStrings[connectionStringName]); 
    } 
} 
相關問題