LoginSignup
6
5

More than 3 years have passed since last update.

.NET Coreでテスト用のWebサーバを構築する

Posted at

概要

HTTPクライアントを用いてテストを行う際、ダミーのエンドポイントとなるWebサーバを構築します。
.NET CoreにはKestrelというWebサーバがあるため、折角なので利用してみました。

環境

  • Windows10
  • Visual Studio 2019
  • .NET Core 2.2
  • Docker for Windows

コードサンプル

サンプルコードを Github にアップしています。
https://github.com/tYoshiyuki/dotnet-core-mock-web-server

解説

コンソールアプリケーションをベースにASP.NET Coreでお馴染みのIWebHostBuilderを作成します。


public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>();

HTTPのパイプライン処理にロジックを追記します。
HTTPアクセス時のヘッダやボディ情報等を出力します。


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        var req = context.Request;

        var output = new List<string>
        {
            "-------------Request Information Start-------------",
            $"Time[{DateTime.Now}]",
            $"Scheme[{req.Scheme}]",
            $"Path[{req.Path}]",
            $"QueryString[{req.QueryString}]",
            $"Method[{req.Method}]",
            $"ContentLength[{req.ContentLength}]",
            $"ContentType[{req.ContentType}]",

            "-------------Body-------------"
        };
        using (var reader = new StreamReader(req.Body))
        {
            var body = reader.ReadToEnd();
            output.Add(body);
        }

        output.Add("-------------Headers--------------");
        output.Add($"Headers Count[{req.Headers.AsEnumerable().Count()}]");

        foreach (var h in req.Headers.AsEnumerable())
        {
            output.Add($"{h.Key}[{h.Value}]");
        }
        output.Add("-------------Request Information End-------------");

        _logger.LogInformation(string.Join(Environment.NewLine, output));

        await context.Response.WriteAsync("Request Success");
        await context.Response.WriteAsync(Environment.NewLine);
        await context.Response.WriteAsync(string.Join(Environment.NewLine, output));
    });
}

デバッグ起動しブラウザでアクセスすると、アクセス時の情報が表示されます。
image.png

Dockerイメージ

DockerイメージをDocker Hubに登録しました。Dockerfileの生成はVisual Studioの機能を利用して実施しています。
上記、Githubのページにdocker-compose.ymlを同梱しています。

docker-compose up -d

30080ポートでアクセスすると、アクセス時の情報が表示されます。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5