web-dev-qa-db-ja.com

結果をデータベースに保存するために、asp.net Web APIからwebApiを使用する方法は?

別のASP.Net Web APIからWEBAPIを使用して、応答をデータベースに保存する方法を知りたいのですが。 javascript、コンソールアプリケーションなどのクライアントからWEBAPIを使用する方法を知っています。

ただし、WEBAPIを使用してサードパーティのAPIからデータを取得し、結果をデータベースに保存して、クライアントがWEBAPIを使用してデータを要求するようにする必要があります。

Asp.Net Web APIでこれを行うことは可能ですか?

47
Karthik Dheeraj

このチュートリアルでは、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を使用していることに注意してください。ここでasyncawaitパターンの使用を検討する必要があります。

92
Nick N.

原因不明の理由により、この解決策は私には機能しません(おそらく、型の非互換性があります)。

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

このようにして、コンテンツがJSON文字列に解析され、それをオブジェクトに変換します。

9
MalachiteBR
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]);
    }
}
1
Srinivas