ASP.NET コアのクラス ライブラリからの API コントローラーの読み込みと登録

多分あなたは何か間違ったことをしている.したがって、これを機能させるための手順は次のとおりです。

  • 新しいプロジェクトを作成します:ASP.NET Core Web アプリケーション (.NET Core);
  • Web API テンプレートを選択します。
  • プロジェクトを実行し、「api/values」にアクセスして、機能していることを確認します。
  • ClassLibrary:クラス ライブラリ (.NET Core) という名前のソリューションに新しいプロジェクトを追加します。
  • Class1.cs を削除し、TestController.cs クラスを作成します。
  • <リ>

    ClassLibrary プロジェクトの project.json に MVC 依存関係を追加します。

    "dependencies": {
      "NETStandard.Library": "1.6.0",
      "Microsoft.AspNetCore.Mvc": "1.0.0"
    },
    
    <リ>

    TestController.cs を次のように更新します。

    [Route("api/[controller]")]
    public class TestController : Controller{
      [HttpGet]
      public IEnumerable<string> Get() {
        return new string[] { "test1", "test2" };
      }
    }
    
    <リ>

    WebAPI プロジェクトに ClassLibrary への参照を追加します。[参照] -> [参照の追加...] を右クリックするか、project.json を次のように更新します。

    "dependencies": {
      "Microsoft.NETCore.App": {
        "version": "1.0.0",
        "type": "platform"
      },
      "Microsoft.AspNetCore.Mvc": "1.0.0",
      "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
      "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
      "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
      "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
      "Microsoft.Extensions.Configuration.Json": "1.0.0",
      "Microsoft.Extensions.Logging": "1.0.0",
      "Microsoft.Extensions.Logging.Console": "1.0.0",
      "Microsoft.Extensions.Logging.Debug": "1.0.0",
      "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
      "ClassLibrary": "1.0.0-*"
    },
    
    <リ>

    Startup.cs ConfigureServices を更新します メソッド:

    public void ConfigureServices(IServiceCollection services) {
      services.AddMvc().AddApplicationPart(Assembly.Load(new AssemblyName("ClassLibrary")));
    }
    
  • プロジェクトを再度実行し、「api/test」にアクセスします。

メイン Web アプリの Startup.cs で特別なことを行う必要はありません。クラス ライブラリを参照するだけで済みます。

1 つの秘訣は、コントローラーを検出するには、クラス ライブラリが project.json ファイルの依存関係セクションで MVC を直接参照する必要があることです。

"Microsoft.AspNetCore.Mvc": "1.0.*"

更新:MVC アプリの場合、スタートアップに特別なものは何も必要ありませんでしたが、API アプリの 1 つでは、おそらく属性ルーティングを使用するために必要でした.

services.AddMvc()
            .AddApplicationPart(Assembly.Load(new AssemblyName("CSharp.WebLib")))
            ;

ここで、CSharp.WebLib はクラス ライブラリの名前です