1

私は最初の ASP.NET Web API プロジェクトに取り組んでおり、カスタム承認属性が機能しています。私がやりたいことは、要求がローカル (つまり、デバッグ) の場合、承認チェックがバイパスされるように属性を設定することです。

他のすべての ASP.NET MVC バージョンでは、Request.IsLocal (または Request.UserHostAddress) をチェックして、要求がローカル コンピューターからのものかどうかを確認できましたが、System.Web.Http.AuthorizeAttribute は HttpRequestMessage オブジェクトのみを公開しているようです。にはこの情報がなく、Request オブジェクトから他にもいくつか不足しているようです。

Web API で使用するための (明らかに制限された) クラスのまったく新しいセットとの取引はどうなりますか? おそらくより直接的には、Authorize 属性で呼び出し先のホスト アドレスを取得するにはどうすればよいでしょうか?

4

2 に答える 2

5

ここまたはここで必要なリクエスト情報を取得する例がいくつかあります。

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var context = actionContext.Request.Properties["MS_HttpContext"] as System.Web.HttpContextBase;
        bool isLocal = context.Request.IsLocal;

これが本当にデバッグのためだけのものである場合は、デバッグ専用コードの周りでこのような条件ステートメントを使用する方が安全かもしれません-特にセキュリティコンテキストでは...

#if DEBUG 
// 
#endif 

理由については...これは、少なくとも部分的には単体テストとモックを容易にするためだと思います。HTTPコンテキストはASP.NET System.Webコンストラクトです... WebApiは、自己ホスト型コードとして実行できるように設計されていますASP.NET から独立しています。

于 2012-08-13T07:30:28.023 に答える
0

複数のミドルウェアコンポーネントを開発するとき、またはHttpContextを直接使用するか、MS_HttpContext(自己のオプションではない)を介してHttpContextを使用するか、それに依存するという不幸なIISバインディングの決定を下した他の人をサポートするときに、この同じ問題に遭遇しました。亭主)。両方の状況で機能するHttpContextを返すことで、この問題を解決するための小さなシムライブラリを作成しました。githubとNuGetで見つけることができます

Install-Package HttpContextShim
于 2012-10-28T01:07:55.083 に答える