我想知道如何從另一個ASP.Net Web API中使用WEBAPI來將響應存儲在數據庫中。 我知道如何從像JavaScript,控制檯應用程序等客戶消耗的WebAPI如何從asp.net Web API中使用webApi將結果存儲到數據庫中?
但要求是,這樣使用我的WebAPI我的客戶,結果被我的WebAPI &店拉數據庫中的第三方API的數據要求我提供數據。
是否可以使用Asp.Net Web API執行此操作?
我想知道如何從另一個ASP.Net Web API中使用WEBAPI來將響應存儲在數據庫中。 我知道如何從像JavaScript,控制檯應用程序等客戶消耗的WebAPI如何從asp.net Web API中使用webApi將結果存儲到數據庫中?
但要求是,這樣使用我的WebAPI我的客戶,結果被我的WebAPI &店拉數據庫中的第三方API的數據要求我提供數據。
是否可以使用Asp.Net Web API執行此操作?
在本教程中解釋瞭如何消耗網頁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
作爲例子的情況。您應該考慮在這裏使用async
await
模式。
感謝您的迴應。 –
我試圖從控制檯應用程序中使用服務,並且成功。我在使用Asp.Net WebApi時遇到了問題。我的查詢是:1.在webApi項目中編寫httpclient程序的地方,因爲程序應該在一天內自動執行一次以更新我的數據庫? 2.是否建議使用像mongo數據庫或任何其他的nomysqldbs,因爲我的答案是JSON對象? –
如果您想每天執行一次,爲什麼還要使用其他Web API?您可以使用控制檯應用程序和Windows計劃任務,每天執行一次。您的數據庫選擇完全取決於其他要求。 –
對於一些無法解釋原因,這種解決方案並不爲我工作(的類型也許有些不兼容),所以我想出了自己的解決方案:
HttpResponseMessage response = await client.GetAsync("api/yourcustomobjects");
if (response.IsSuccessStatusCode)
{
var data = await response.Content.ReadAsStringAsync();
var product = JsonConvert.DeserializeObject<Product>(data);
}
這樣,我的內容被解析成JSON字符串,然後將其轉換爲我的對象。
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]);
}
}
我沒有看到這裏的問題。您的客戶端本身是Web API服務的事實在您如何調用Web API服務方面沒有任何影響。 – Stijn
請接受答案,而不是感謝評論,這樣這個問題將不再是開放的 – OnTheFly
我試過用RestSharp,它是一個更簡單的問題。你可以得到完整的源代碼:https://github.com/garora/somestuff/tree/master/ConsumeWebAPI –