私はグーグルとそのさまざまなバリエーションがありますが、私はまだ全く混乱していません。私は、特定の属性を持つすべてのアクションにカスタムヘッダーを追加したいだけです。シンプルに聞こえる?しかし、そうではありません。私は、次の書かれている:MVCのアクションのカスタムヘッダーを追加
[AttributeUsage(AttributeTargets.Method)]
public class HelloWorldAttribute : ActionFilterAttribute
{
/// <inheritdoc />
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers["X-HelloWorld"] = string.Empty;
}
}
そして、それは彼らがController
レベルに[Authorize]
によって禁止されている場合を除き、すべての要求のために正常に動作します。
この属性をレベルController
に使用して、このヘッダーを追加する必要のあるメソッド名を使用しようとしましたが、機能しません。 Authorize
は常に優先順位が高いようです。そしてあなたはそれが醜いことに同意することができます。
どうすればできますか?
グローバルに登録するとどうなりますか?もしまだないなら。 – dcg
@dcg私はコントローラのカップルにいくつかのメソッドのためだけに必要なので私はしないでください。だから、このヘッダを追加する必要のあるコントローラのホワイトリストをグローバルに登録し、それら以外のすべてをblaclistするよりも簡単です。 –
さて、一歩踏み込んで、あなたが何をしているのか考えてみてください。誰かが何かを見ることを許可されていないときにヘッダーのコードを実行したいのですが?定義上、あなたが承認されていない場合、あなたはそれから機能を得るべきではなく、それはあなたのヘッダーを含みます。認可が「優先度が高い」というわけではありません。これは前述のことを達成するためにパイプラインの早期に実行されることです。 – JuanR