これはコード設計の問題です:)
httpリクエストヘッダーを取得してAPIキーを検証するDelegatingHandlerがあります。私が推測するかなり一般的なタスク。コントローラーでビジネス ロジックを呼び出し、すべてのビジネス関連情報を渡します。ただし、特定の API キーに応じて、ビジネス ロジック (個別のアセンブリ) 内の動作を変更するという課題に直面しています。
さまざまな可能な解決策が頭に浮かびます...
ビジネス ロジック メソッドのシグネチャを変更して、API キーも要求するようにします。
public void SomeUseCase(Entity1 e1, Entity2 e2, string apiKey);
HttpContext.Current を使用して、現在のリクエスト コンテキストにアクセスします。ただし、HttpContext を使用すると、ホスティング オプションが IIS に制限されることをどこかで読みました。それに適したオプションはありますか?
var request = HttpContext.Current.Request; // 次にヘッダー情報を抽出します
セッションを使用します(実際にはその道を行きたくない...)
その話題についてどう思いますか。
私は#1に行きますが、ビジネスロジックメソッドに環境的なものを混ぜるという考えは好きではありません. しかし、見方によっては、API キーは実際にはロジックに関連していると主張するかもしれません。
更新 #1: delegatingHandler を使用して apiKey を検証しています。検証が完了したら、それを Request の Properties コレクションに追加します。
問題の部分は、「api-key」または RegisteredIdentifier がビジネス ロジック層にどのように渡されるかです。現在、オブジェクト (IRegisteredIdentifier など) をパラメーターとしてビジネス ロジック クラスのコンストラクターに渡しています。これを解決するためのこれ以上エレガントな方法はないことを理解しています(?)。メソッドのシグネチャを変更することを考えましたが、インターフェイスの汚染かどうかはわかりません。一部のメソッドは api-key を使用する必要がありますが、ほとんどのメソッドはそうではありません。経験上、その数は減少するよりも増加する可能性が高いことがわかります:) したがって、私の bl クラスでそれへの参照を保持することは良い選択のようです.
回答ありがとうございます - それらはすべて私の解決策の一部だと思います。私はStackOverflowを初めて使用します..しかし、私が見る限り、回答をまだ評価できません。安心してください 私はまだ感謝しています:)