events
3月31日 23時 - 4月2日 23時
究極の Microsoft Fabric、Power BI、SQL、AI コミュニティ主導のイベント。 2025 年 3 月 31 日から 4 月 2 日。
今すぐ登録このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
提供元: Microsoft
このトピックでは、ASP.NET Web API 2.2 の新機能について説明します。
ランタイム機能は、NuGet ギャラリーで NuGet パッケージとしてリリースされます。 ランタイム パッケージはすべてセマンティック バージョンの仕様に従います。 ASP.NET Web API 2.2 パッケージの最新バージョンは、"5.2.0" です。 これらのパッケージは、NuGet を使用してインストールまたは更新できます。 このリリースには、NuGet 上の対応するローカライズされたパッケージも含まれています。
リリース済みの NuGet パッケージは、NuGet パッケージ マネージャー コンソールを使用してインストールまたは更新できます。
Install-Package Microsoft.AspNet.WebApi -Version 5.2.0
ASP.NET Web API 2.2 に関するチュートリアルとその他の情報は、ASP.NET Web サイト (https://www.asp.net/web-api) から入手できます。
このリリースでは、OData v4 プロトコルのサポートが追加されました。 詳細については、「Web API OData v4 のドキュメント」を参照してください。
OData v4 の主要な機能と変更点を次に示します。
属性ルーティングで IDirectRouteProvider と呼ばれる拡張性ポイントが提供されるようになりました。これにより、属性ルートの検出と構成方法を完全に制御できます。 IDirectRouteProvider は、アクションとコントローラーの一覧と関連するルート情報を提供し、それらのアクションに必要なルーティング構成を正確に指定する役割を担います。 MapAttributes/MapHttpAttributeRoutes を呼び出すときに、IDirectRouteProvider の実装を指定できます。
IDirectRouteProvider をカスタマイズするには、既定の実装である DefaultDirectRouteProvider を拡張するのが最も簡単です。 このクラスは、属性の検出、ルート エントリの作成、ルート プレフィックスとエリア プレフィックスの検出のロジックを変更するための、オーバーライド可能な仮想メソッドを個別に提供します。
この新しい拡張性ポイントで実行できる操作の例を次に示します。
ルート属性の継承をサポート
例:
ここでは、"/api/values/10" のような要求で "Success:10" が正常に返されます
public class BaseController : ApiController
{
[Route("{id:int}")]
public string Get(int id)
{
return "Success:" + id;
}
}
[RoutePrefix("api/values")]
public class ValuesController : BaseController
{
}
config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
protected override IReadOnlyList<IDirectRouteFactory>
GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
{
return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>
(inherit: true);
}
}
必要な規則に従って、属性ルートに既定のルート名を指定します。 既定では、属性ルーティングは属性ルートの名前を自動的に作成しません。
ルート テーブルに登録される前に、属性ルートのルート テンプレートを一元的に変更します。
これで、Windows Phone 8.1 をターゲットにするとき、または Universal App 内から Web API Client NuGet パッケージを使用して、Web API クライアント ロジックを実装できるようになりました。
このセクションでは、ASP.NET Web API 2.2 の既知の問題と重大な変更について説明します。
問題: オーバーロードされた関数を FunctionImport として公開できませんでした
オーバーロードされた関数が 2 つあり、その 2 つの関数が以下に示すように FunctionImport でもある場合、~/GetAllConventionCustomers(CustomerName={customerName}) を要求すると System.InvalidOperationException が発生します。
<Function Name="GetAllConventionCustomers"
ReturnType="Collection(WebStack.QA.Test.OData.UnboundOperation.ConventionCustomer)"
IsComposable="true" />
<Function Name="GetAllConventionCustomers"
ReturnType="Collection(WebStack.QA.Test.OData.UnboundOperation.ConventionCustomer)"
IsComposable="true">
<Parameter Name="CustomerName" Type="Edm.String" FixedLength="false"
Unicode="false" />
</Function>
...
<FunctionImport Name="GetAllConventionCustomers"
Function="WebStack.QA.Test.OData.UnboundOperation.GetAllConventionCustomers"
EntitySet="ConventionCustomers" IncludeInServiceDocument="true" />
回避策: この問題の回避策は、両方の関数オーバーロードを FunctionImports として追加することです。
URL エンコードされたスラッシュ (%2F) と円記号 (%5C) を含む文字列リテラルを OData リソース パスで使用すると 404 エラーが発生します。
たとえば、文字列リテラルは、関数のパラメーターやエンティティ セットのキー値として OData リソース パスで使用できます。
/Employees/Total.GetCount(Name='Name%2F')
/Employees('Name%5C')
サービスがこのような要求を受け取ると、ホストは Web API ランタイムに渡す前に、それらのエスケープ シーケンスをエスケープ解除します。 これにより、次のような攻撃から保護されます。
http://www.contoso.com/..%2F..%2F/Windows/System32/cmd.exe?/c+dir+c:
これにより、Web API OData スタックから 404 エラー (Not Found) が返されます。 このエラーを防ぐには、クライアントでスラッシュ (%252F) と円記号 (%255C) の二重エスケープ シーケンスを使用する必要があります。 これは、/Employees?$filter=Name eq 'Name%2F' などのクエリ文字列では発生しません
エスケープされていないスラッシュ ('/') と円記号 ('') は、OData リソース パスの文字列リテラルでは使用できないことに注意してください。 スラッシュはパス区切り文字としてのみ表示し、円記号は OData リソース パスに一切使用しないようにする必要があります。 (どちらも OData クエリ文字列の一部で使用できます。)
回避策: DefaultODataPathHandler の Parse メソッドをオーバーライドして、文字列リテラルのスラッシュと円記号をエスケープしてから、実際に解析することができます。 このアプローチのサンプルについては、こちらをご覧ください。
[Queryable] 属性は非推奨です。 新しい OData v3 アプリケーションでは、System.Web.Http.OData.EnableQueryAttribute を使用する必要があります。
ODataHttpConfigurationExtensions.EnableQuerySupport 拡張メソッドによって、EnableQueryAttribute がグローバル フィルター コレクションに追加されるようになりました。 コントローラーに [Queryable] 属性がある場合、config.EnableQuerySupport()
の呼び出しは [Queryable] 属性は失敗します
この問題を解決するには、QueryableAttribute のインスタンスをすべて System.Web.Http.OData.EnableQueryAttribute に置き換えることをお勧めします。
別の回避策として、Web API 構成で次のコードを使用します。
config.EnableQuerySupport(new QueryableAttribute());
問題: FromUri 属性で装飾された複合型のモデル バインドが、属性ルーティングを使用すると異なる動作をします。
問題: MVC/Web API を 5.2.0 パッケージでプロジェクトにスキャフォールディングすると、プロジェクトにまだ存在しないパッケージに対しては 5.1.2 パッケージが作成されます
ASP.NET MVC 5.2 の NuGet パッケージを更新しても、ASP.NET スキャフォールディングや ASP.NET Web アプリケーション プロジェクト テンプレートなどの Visual Studio ツールは更新されません。 これらのツールでは、ASP.NET ランタイム パッケージの旧バージョン (Update 2 の 5.1.2 など) を使用します。 その結果、ASP.NET スキャフォールディングでは、必要なパッケージがプロジェクトでまだ使用できない場合、旧バージョン (Update 2 の 5.1.2 など) がインストールされます。 ただし、Visual Studio 2013 RTM または Update 1 の ASP.NET スキャフォールディングでは、プロジェクト内の最新のパッケージは上書きされません。 プロジェクトのパッケージを Web API 2.2 または ASP.NET MVC 5.2 に更新した後に ASP.NET スキャフォールディングを使用する場合は、Web API と ASP.NET MVC のバージョンに一貫性があることを確認してください。
Microsoft.AspNet.OData 5.2.1 パッケージには NuGet 依存関係の更新プログラムが含まれていますが、バグ修正は含まれていません。 この更新プログラムにより、Microsoft.OData.Core 6.4.0 への厳密な依存関係はなくなったため、6.4.0 から 7.0.0 までの任意のバージョンにアップグレードできます。
このリリースでは、Json.Net 6.0.4
の依存関係を変更しました。 Json.NET
のこのリリースの新機能の詳細については、「Json.NET 6.0 リリース 4 - JSON マージ、依存関係の挿入」を参照してください。 このリリースには、Web API のその他の新機能やバグ修正はありません。 その後、この新しいバージョンの Web API に依存するように、Microsoft が所有する他のすべての依存パッケージを更新しました。
リリースについては、こちらをご覧ください。 このリリースにはバグ修正のみが含まれています。
events
3月31日 23時 - 4月2日 23時
究極の Microsoft Fabric、Power BI、SQL、AI コミュニティ主導のイベント。 2025 年 3 月 31 日から 4 月 2 日。
今すぐ登録トレーニング
モジュール
minimal API、ASP.NET Core、.NET を使用して Web API をビルドする - Training
.NET を使用して Web API をビルドする方法について説明します。 また、読み取りと書き込みの両方を処理するさまざまなルートを設定する方法についても説明します。