私はいくつかのプロジェクトに取り組んでいます。そのうちの1つはASP.NET 4.5
アプリケーションとその他は.Net Core API 1.1
プロジェクト。 asp.netアプリケーションはHttpContext
クラスを使用して、Cookieとページヘッダーを読み取ります。次に、これを両方のプロジェクトで使用できる.net標準ライブラリに移動する必要があります。 .net標準SDKにHttpContextが見つかりません。助言がありますか?
アプローチには問題があります。NETStandardは、使用可能な.NETの最も基本的な実装です。つまり、プラットフォームおよびシナリオに依存しない基本機能のみが実装されます。HttpContext
は.NET Frameworkと.NET Core(どちらも.NET Standardを実装しています)の両方に存在しますが、Webに固有であるため、.NETには存在しません標準。
したがって、次の3つのオプションがあります。
System.Web.HttpContext
を使用しますMicrosoft.AspNetCore.Http.HttpContext
を使用しますHttpContext
を使用するロジックを.NET Standardプロジェクトから遠ざけるただし、これらのクラスは大きく異なることに注意してください。 .NET CoreバージョンはASP.NET Core用に作成されたもので、ASP.NET 4.5以前とは大きく異なります。
.NETStandard 2.0をターゲットにしている場合、canはHttpContext
で作業できます。
。NET Standard ライブラリには含まれていませんが、Microsoft.AspNetCore.Http.Abstractions
パッケージ(.NET Standard 2.0を対象としています)を使用すると、 HttpContext
で作業できます。
私はこれらの答えと、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;
}
}
}
}
この[Cookieとページヘッダーの読み取り]を、両方のプロジェクトで使用できる.NET標準ライブラリに移動する必要があります...
こんなことしないで。
Cookieから読み取ったデータに対して操作Xを実行していると仮定しましょう。代わりに、この操作Xをライブラリに移動できます。 ASP.NETプロジェクトの仕事は、要求パイプラインを処理することです。 Cookieの読み取りはそこに属します。
NetStandardライブラリをシンプルに保ち、可能であればWebリクエストから解放したいという上記の答えに同意します。 .net標準を対象とするSystem.Net.Http nugetパッケージがあります。これは、ライブラリを作成していてasp.netコアのオーバーヘッドが不要な場合に、完全なフレームワークと.netコア用に4.6.xを更新するときに使用できます。