概要
クラスライブラリやコンソールアプリ内にWebサーバーを立てたい場合に、ASP.Net Coreを使えるようにする手順です。
手順
ASP.Net Coreフレームワークの参照
サーバーを立てたいプロジェクトのcsprojを編集して、フレームワークの参照を追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
+ <ItemGroup>
+ <FrameworkReference Include="Microsoft.AspNetCore.App" />
+ </ItemGroup>
</Project>
Controllerの準備
今回呼び出したいAPIを記述したControllerクラスを用意
TestController.cs
using Microsoft.AspNetCore.Mvc;
namespace ConsoleApp1
{
[ApiController]
[Route("[controller]/[action]")]
public class TestController
{
[HttpGet]
public string GetMessage()
{
return "Hello World";
}
}
}
Webサーバーの立ち上げプログラムを記述
ひな形を使わないときは、なぜかAPIとコントローラの紐づけがうまくいかないため、
Controllerを記述したプロジェクトを明示的に指定する必要がありました。
Program.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Controllerを記述したプロジェクトを明示的に指定
var assembly = AppDomain.CurrentDomain.GetAssemblies()
.ToList()
.First(x => x.GetName().Name == "ConsoleApp1");
builder.Services
.AddControllers()
.AddApplicationPart(assembly);
var app = builder.Build();
app.UseAuthorization();
app.MapControllers();
app.Run();
構成ファイルの準備
ASP.Net Core特有のappsettings.jsonという名前の構成ファイルを準備します。
Visual Studioでjsonファイルを追加します。
プロパティから、ビルドアクションを「コンテンツ」に変更し、コピー動作を「常にコピー」にしておきます。
構成内容を記述します。
appsettings.json
{
"AllowedHosts": "*",
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:1234"
}
}
}
}
動作確認
デバッグ実行したら、ブラウザでAPIにアクセス。
http://localhost:1234/Test/GetMessage
「Hello World」の文字が表示されることを確認します。