web-dev-qa-db-ja.com

.net標準ライブラリのHttpContext

私はいくつかのプロジェクトに取り組んでいます。そのうちの1つはASP.NET 4.5アプリケーションとその他は.Net Core API 1.1プロジェクト。 asp.netアプリケーションはHttpContextクラスを使用して、Cookieとページヘッダーを読み取ります。次に、これを両方のプロジェクトで使用できる.net標準ライブラリに移動する必要があります。 .net標準SDKにHttpContextが見つかりません。助言がありますか?

15
Vishal A

アプローチには問題があります。NETStandardは、使用可能な.NETの最も基本的な実装です。つまり、プラットフォームおよびシナリオに依存しない基本機能のみが実装されます。
HttpContextは.NET Frameworkと.NET Core(どちらも.NET Standardを実装しています)の両方に存在しますが、Webに固有であるため、.NETには存在しません標準。

したがって、次の3つのオプションがあります。

  1. .NET Frameworkをターゲットにし、System.Web.HttpContextを使用します
  2. .NET Coreをターゲットにし、Microsoft.AspNetCore.Http.HttpContextを使用します
  3. HttpContextを使用するロジックを.NET Standardプロジェクトから遠ざける

ただし、これらのクラスは大きく異なることに注意してください。 .NET CoreバージョンはASP.NET Core用に作成されたもので、ASP.NET 4.5以前とは大きく異なります。

15

.NETStandard 2.0をターゲットにしている場合、canHttpContextで作業できます。

。NET Standard ライブラリには含まれていませんが、Microsoft.AspNetCore.Http.Abstractionsパッケージ(.NET Standard 2.0を対象としています)を使用すると、 HttpContext で作業できます。

4
pim

私はこれらの答えと、WebプロジェクトにHttpContextのみを含めることについてのナンセンスには同意しません。あなたはコードを再利用できるようにしたいので、それは実際に密結合されています。したがって、.net core OR .net standardのクラスライブラリはHttpContext

.NET Standardで追加したいもの:

Microsoft.AspNetCore.Http.Abstractions

悲しいことに、新しいHttpContextについては非常に異なっていますHttpContext.Currentが欠落しているため、セッションやリクエストなど。

(はい、私はデザインパターンを取得し、分離してよりテスト可能にする理由を取得します)

Currentを取得するために実行できるちょっとしたトリックを次に示します。

namespace System.Web
{
    public static class HttpContext
        {
            private static Microsoft.AspNetCore.Http.IHttpContextAccessor m_httpContextAccessor;


    public static void Configure(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor)
        {
            m_httpContextAccessor = httpContextAccessor;
        }


        public static Microsoft.AspNetCore.Http.HttpContext Current
        {
            get
            {
                return m_httpContextAccessor.HttpContext;
            }
        }

    }
}
2
Tom Stickel

この[Cookieとページヘッダーの読み取り]を、両方のプロジェクトで使用できる.NET標準ライブラリに移動する必要があります...

こんなことしないで。

Cookieから読み取ったデータに対して操作Xを実行していると仮定しましょう。代わりに、この操作Xをライブラリに移動できます。 ASP.NETプロジェクトの仕事は、要求パイプラインを処理することです。 Cookieの読み取りはそこに属します。

1
gldraphael

NetStandardライブラリをシンプルに保ち、可能であればWebリクエストから解放したいという上記の答えに同意します。 .net標準を対象とするSystem.Net.Http nugetパッケージがあります。これは、ライブラリを作成していてasp.netコアのオーバーヘッドが不要な場合に、完全なフレームワークと.netコア用に4.6.xを更新するときに使用できます。

0
Kentonbmax