別の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");
次のようなAcceptヘッダーを使用して、リクエストが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
パターンの使用を検討する必要があります。
原因不明の理由により、この解決策は私には機能しません(おそらく、型の非互換性があります)。
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]);
}
}