問題:
NET Core 3.1でAPIアプリケーションを作成しています。すべてのApiControllers
とアクションにルート属性を設定することは避けたいです。従来のルートを設定するためにUseEndpoints
を介して多くの組み合わせを試してみましたが、失敗します。
一部の構成では、Apiを動作させることができません。一部の構成では、起動時にこの例外が発生します。
InvalidOperationException:アクション 'ApiIsWorking'には属性ルートがありません。 ApiControllerAttributeで注釈が付けられたコントローラーのアクションメソッドは、ルーティングされる属性である必要があります。
startup.cs
コントローラをクラス名で、アクションをメソッド名で自動マップするには?
ありがとうございました!
一部のコード:
startup.cs
...
services.AddControllers()
...
app.UseHttpsRedirection()
.UseRouting()
.UseAuthentication()
.UseEndpoints(endpoints => ?? )
.UseCoreHttpContext()
.UseServerConfiguration();
controller.cs
[ApiController]
public class BaseAPI : ControllerBase
{
[HttpGet]
public string ApiIsWorking()
{
return "API is working!";
}
}
ソリューション:
Reza Aghaeiがソリューションで言っているように 、エラーはApiController属性を追加することでした。削除すると、UseEndpointsコマンドが機能し始めます。
私の間違いは、APIを介して公開する必要があるクラスを認識できるように属性を追加することでした。 UseEndpointsはControllerBaseから継承するクラスのみをマップするため、必要ありませんでした。
警告:
1) 従来のルーティングには[FromBody]
アクションのパラメータの属性。
2)強調表示 Zinovの応答 .NET CoreのSwashbuckleでの従来のルーティング問題について
これを試しましたか?
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
ここで、.netコアで従来のルーティングを使用するこの道を進む場合のアドバイスを示します。 APIの実装が完了したら、それにドキュメントを追加します。人々は通常、このnugetパッケージSwashbuckle.AspNetCoreを使用します。これは、OpenAPI(Swagger)の新しい標準を実装しています。しかし、ここでは、従来のルーティングを使用していて、このツールでドキュメントを生成したい場合の問題があります。
(属性ルーティングではなく)従来のルーティングを使用している場合、従来のルーティングを使用するコントローラーおよびコントローラー上のアクションはApiExplorerに表示されません。つまり、Swashbuckleはこれらのコントローラーを見つけてSwagger操作を生成できません。それら
詳細については、このリンクを参照してください。 Swashbuckle APIのドキュメントを使用して、将来的に多くの頭痛の種を節約できることを願っています