如何从asp.net Web API使用webApi将结果存储在数据库中?

我想知道如何从另一个ASP.Net Web API使用WEBAPI来将响应存储在数据库中。 我知道如何从JavaScript,控制台应用程序等客户端使用WEBAPI。

但要求是通过我的WEBAPI从第三方API提取数据并将结果存储在数据库中,以便使用我的WEBAPI客户端请求我提供数据。

是否有可能用Asp.Net Web API做到这一点?

在本教程中解释了如何使用C#使用Web api ,在本例中使用了一个控制台应用程序,但您也可以使用另一个Web 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中使用Accept头来请求这样的响应:

 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模式。

由于一些无法解释的原因,这个解决scheme对我来说不起作用(也许是一些types的不兼容),所以我想出了一个解决scheme:

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

这样我的内容被parsing成JSONstring,然后将其转换为我的对象。

 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]); } }