public class NaverService : INaverService
{
    private readonly DBContext _dBContext;

    public NaverService(DBContext dbContext)
    {
        _dBContext = dbContext;
    }

    public async Task<List<NaverEnginePage>> GetNaverEpProductInfo()
    {
        var connection = _dBContext.Database.GetDbConnection();
        if (connection.State == ConnectionState.Closed) connection.Open();
        using (var command = connection.CreateCommand())
        {
            command.CommandText = "User Storage Procedure Name";
            command.CommandType = CommandType.StoredProcedure;

            var products = new List<NaverEnginePage>();
            using (var reader = await command.ExecuteReaderAsync())
            {
                while (reader.Read())
                {
                    products.Add(new NaverEnginePage()
                    {
                        id = reader["id"].ToString(),
                        title = reader["title"].ToString(),
                        price_pc = (int)reader["price_pc"],
                        link = reader["link"].ToString(),
                        image_link = reader["image_link"].ToString(),
                        category_name1 = reader["category_name1"].ToString(),
                        shipping = reader["shipping"].ToString()
                    });
                }
            }

            return products;
        }
    }

}
  • DB관련이나 PROC Name 같은거는 임의로 대체해서 서술
  • 엔티티로 선언 후 해당 상품에 관련 정보를 add 시킴.

 

[HttpGet(ApiRoutes.Naver.GetNaverEpProductInfo)]
public async Task<IActionResult> GetNaverEpProductInfo()
{
    var products = await _naverService.GetNaverEpProductInfo();

    var tsv = new StringBuilder();
    tsv.AppendLine("id\ttitle\tprice_pc\tlink\timage_link\tcategory_name1\tshipping");

    foreach (var product in products)
    {
        tsv.AppendLine($"{product.id}\t{product.title}\t{product.price_pc}\t{product.link}\t{product.image_link}\t{product.category_name1}\t{product.shipping}");
    }

    return Content(tsv.ToString(), "text/plain", new UTF8Encoding(false));
}
  • 해당 경로에서 .tsv 형식으로 만들어면 txt파일을 다운로드 받을수 있게 해야한다고 가이드에서 유도하기에 
    StringBuilder로 Append 하여 컬럼과 내용을 K=V 처럼 맞춰서 foreach 진행
  • return할시 text/plain으로 형식을 맞춰서 내보냄
수토리지