はじめに
ASP.NET Core で、複数の Web サイトで共通的に使用する Web API を別の .NET Core クラス ライブラリ プロジェクトで定義して、再利用できるようしたいことがあります。
ASP.NET Core 2 系では、Nuget に、Microsoft.AspNetCore.Mvc.Controller を含むパッケージがあったので、これを追加して、参照して、継承して、MVC のコントローラーを定義できました。
ASP.NET Core 3.1 では、やり方がことなるので、これを説明します。
Microsoft.AspNetCore.App の参照設定
[クラス ライブラリ(.NET Core)] を選択して、プロジェクトを作成します。
当然、この時点だと、Microsoft.AspNetCore.App への参照がありません。
Nuget パッケージ マネジャーで、Microsoft.AspNetCore を追加しようとしてみましたが、、、Version 3.1 系が見つかりません。
色々と調べて、以下のサイトにたどり着きました。
このサイトのやり取りによると、.csproj に直接、フレームワークへの参照として Microsoft.AspNetCore.App を追加するとあります。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
すると、[ソリューション エクスプローラー] - [依存関係] - [フレームワーク] に、Microsoft.AspNetCore.App が追加されます。
これで、.NET Core クラス ライブラリプロジェクトで、Microsoft.AspNetCore.Mvc.Controller が参照できるようになり、継承して、MVC のコントローラーが定義できるようになります。
using Microsoft.AspNetCore.Mvc;
namespace AspNetCoreClassLibrary001
{
public class SharedController : Controller
{
[HttpGet("api/Hello/{yourName}")]
public ActionResult Hello(string yourName)
{
return Content($"Hello, {yourName}!!");
}
}
}