3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NET Core 3.1 のコントローラーを別プロジェクトの .NET Core クラス ライブラリで定義する

Last updated at Posted at 2020-10-03

はじめに

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)] を選択して、プロジェクトを作成します。
クラス ライブラリ(.NET Core)

当然、この時点だと、Microsoft.AspNetCore.App への参照がありません。
ソリューション エクスプローラー

Nuget パッケージ マネジャーで、Microsoft.AspNetCore を追加しようとしてみましたが、、、Version 3.1 系が見つかりません。
NuGet

色々と調べて、以下のサイトにたどり着きました。

このサイトのやり取りによると、.csproj に直接、フレームワークへの参照として Microsoft.AspNetCore.App を追加するとあります。

.csproj
<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 のコントローラーが定義できるようになります。

SharedController.cs

using Microsoft.AspNetCore.Mvc;

namespace AspNetCoreClassLibrary001
{
    public class SharedController : Controller
    {
        [HttpGet("api/Hello/{yourName}")]
        public ActionResult Hello(string yourName)
        {
            return Content($"Hello, {yourName}!!");
        }
    }
}

このコードを実行した結果は以下となります。
Hello

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?