728x90
728x170
▶ ITestService.cs
using System.Threading.Tasks;
namespace TestProject
{
/// <summary>
/// 테스트 서비스 인터페이스
/// </summary>
public interface ITestService
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
#region 페이지 구하기 - GetPage()
/// <summary>
/// 페이지 구하기
/// </summary>
/// <returns>페이지 태스크</returns>
Task<string> GetPage();
#endregion
}
}
728x90
▶ TestService.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
/// <returns>처리 결과 태스크</returns>
private static async Task<int> Main()
{
IHostBuilder builder = new HostBuilder()
.ConfigureServices
(
(hostContext, services) =>
{
services.AddHttpClient();
services.AddTransient<ITestService, TestService>();
}
)
.UseConsoleLifetime();
IHost host = builder.Build();
using(IServiceScope serviceScope = host.Services.CreateScope())
{
IServiceProvider serviceProvider = serviceScope.ServiceProvider;
try
{
ITestService service = serviceProvider.GetRequiredService<ITestService>();
string pageContent = await service.GetPage();
Console.WriteLine(pageContent.Substring(0, 500));
}
catch(Exception exception)
{
ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogError(exception, "An error occurred.");
}
}
return 0;
}
#endregion
}
}
300x250
▶ Program.cs
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace TestProject
{
/// <summary>
/// 테스트 서비스
/// </summary>
public class TestService : ITestService
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// HTTP 클라이언트 팩토리
/// </summary>
private readonly IHttpClientFactory factory;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - TestService(factory)
/// <summary>
/// 생성자
/// </summary>
/// <param name="factory">HTTP 클라이언트 팩토리</param>
public TestService(IHttpClientFactory factory)
{
this.factory = factory;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 페이지 구하기 - GetPage()
/// <summary>
/// 페이지 구하기
/// </summary>
/// <returns>페이지</returns>
public async Task<string> GetPage()
{
HttpRequestMessage requestMessage = new HttpRequestMessage
(
HttpMethod.Get,
"https://www.bbc.co.uk/programmes/b006q2x0"
);
HttpClient client = this.factory.CreateClient();
HttpResponseMessage responseMessage = await client.SendAsync(requestMessage);
if(responseMessage.IsSuccessStatusCode)
{
byte[] byteArray = await responseMessage.Content.ReadAsByteArrayAsync();
return Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
}
else
{
return $"상태 코드 : {responseMessage.StatusCode}";
}
}
#endregion
}
}
※ 패키지 설치 : Microsoft.Extensions.Hosting, Microsoft.Extensions.Http
1. 비주얼 스튜디오를 실행한다.
2. 비주얼 스튜디오에서 [도구] / [NuGet 패키지 관리자] / [패키지 관리자 콘솔] 메뉴를 클릭한다.
3. [패키지 관리자 콘솔]에서 아래 명령을 실행한다.
Install-Package Microsoft.Extensions.Hosting, Microsoft.Extensions.Http
728x90
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] DateTime 구조체 : W3C 날짜/시간 문자열에서 날짜/시간 구하기 (0) | 2020.11.12 |
---|---|
[C#/COMMON] DateTime 구조체 : W3C 날짜/시간 문자열 구하기 (0) | 2020.11.12 |
[C#/COMMON/.NETCORE] dotnet tool install 명령 : Entity Framework Core 업데이트하기 (0) | 2020.11.10 |
[C#/COMMON/.NETCORE] dotnet ef 명령 : Entity Framework Core 버전 확인하기 (0) | 2020.11.10 |
[C#/COMMON/.NETCORE] dotnet ef 명령 : Entity Framework Core 설치 여부 확인하기 (0) | 2020.11.10 |
[C#/COMMON/.NETCORE] 누겟 설치 : Microsoft.Extensions.Http.Polly (0) | 2020.11.08 |
[C#/COMMON/.NETCORE] dotnet add package 명령 : 누겟 패키지 설치하기 (0) | 2020.11.03 |
[C#/COMMON/.NETCORE] dotnet sln add 명령 : 솔루션에 프로젝트 추가하기 (0) | 2020.11.03 |
[C#/COMMON/.NETCORE] dotnet new sln 명령 : 솔루션 파일 생성하기 (0) | 2020.11.03 |
[C#/COMMON/.NETCORE] 누겟 설치 : MySql.Data (0) | 2020.11.03 |