MVC template을 사용한 서버 생성

  1. HelloMvc
    • 이전에 사용한 HelloMvc를 그대로 사용함
  2. ReqMvc
    • HttpClient를 사용해서 요청을 보낼 서버

HelloMvc 설정

  • Controllers/HelloWorldController.cs에 간단한 get 라우팅 추가
    1
    2
    3
    4
    
    public string Hi()
    {
        return "Hi from HelloMvc";
    }
    

ReqMvc 설정

  • mvc template으로 생성
    • --no-https 옵션 추가하지 않음
  • Program.cs에 아래 내용 추가
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    ...
    builder.Services.AddControllersWithViews();
    builder.Services.AddHttpClient();
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("mypolicy",
        policy =>
        {
            policy.WithOrigins("https://*")
            .AllowAnyHeader();
        });
    });
    ...
    
    • CORS 처리
  • Controllers/SayController.cs 생성

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    using System.Diagnostics;
    using Microsoft.AspNetCore.Mvc;
    using ReqMvc.Models;
    using Microsoft.Net.Http.Headers;
    
    namespace ReqMvc.Controllers;
    
    public class SayController : Controller
    {
        private readonly IHttpClientFactory _httpClientFactory;
    
        public SayController(IHttpClientFactory httpClientFactory) => _httpClientFactory=httpClientFactory;
    
        public string sayHi()
        {
            var requestMessage=new HttpRequestMessage(
                HttpMethod.Get,
                "https://localhost:7006/HelloWorld/Hi")
            {
                Headers=
                {
                    {HeaderNames.Accept, "text/plain"},
                    {HeaderNames.UserAgent, "HttpRequestsSample"}
                }
            };
    
            var httpClient=_httpClientFactory.CreateClient();
            var res=httpClient.Send(requestMessage);
    
            byte[] msg=new byte[100];
            //return res.ToString();
            res.Content.ReadAsStream().Read(msg);
            string strmsg=System.Text.Encoding.UTF8.GetString(msg).TrimEnd('\0');
            Console.WriteLine(strmsg);
            return strmsg;
        }
    
        public string ret(){
            string str="just string";
            return str;
        }
    }
    

    kreskel-http-req1

    • 뒤에 '\0'을 제거하지 않으면 파일으로 다운로드됨

    kreskel-http-req2

PNG GET

  • System.Drawing.Common은 non-Windows 플랫폼에서 지원되지 않음

Leave a comment