web-dev-qa-db-ja.com

.NET Framework 4.6.1でIActionResultを使用する方法

私はこれに対する答えを過去数時間探し続けてきましたが、成功しませんでした。私はプログラミングに比較的慣れていないので、気楽にやってください:-)

私の問題は、.NET Framework 4.6.1を対象とするソリューションのプロジェクトの1つでIActionResultを使用できないようですが、.NET Standard 2.0を対象とする同じソリューション(別のプロジェクト)で使用できます。

私はまったく同じNugetパッケージをインストールしようとしましたが、対象となるフレームワークを除いて、すべてがまったく同じに見えます。

次のようなIActionResultsを使用してAzure関数を記述したいだけです。

 public static async Task<IActionResult> MyFuntcion([HttpTrigger(AuthorizationLevel.Function, "get", Route = null")]HttpRequest req, TraceWriter log)
    {

      //Do some stuff then redirect

    }

私のターゲットフレームワークがIActionResultを使用できない原因になっていると思いますが、理由はわかりません。

特にこの作業を行う方法を知っている人がいれば、どんな助けも大歓迎です。

ありがとうございました

8
jagge123

ショートバージョン

フルフレームワークMVCまたはWeb APIでIActionResultを結果オブジェクトとして使用することはできません。まず、適切なタイプにマップする必要があります。おそらくしないでくださいクラスライブラリでIActionResultを使用して、コアプロジェクトに戻り値の型を処理させます

しかしASP.NET Coreは.NET Coreランタイムを必要とせず、フルフレームワークもターゲットにすることができます。おそらく、メインプロジェクトのフルフレームワークを対象としたASP.NET Coreプロジェクトを使用できますか?

説明

ASP.NET Coreは、ASP.NET 5の「新しい」名前です。これは、MVCスタックとWeb APIスタックをマージする新しいフレームワークであり、古いフルフレームワークとその後DNXCoreと呼ばれるものの両方で実行するように構築されました。どちらの名前もASP.NET Core 1.0およびCore .NET 1.0に変更され、今日の混乱を招いています。

ASP.NET Core、ASP.NET MVC、およびWeb APIが2つの異なるスタックになる前は、異なるコントローラー基本クラスを使用し、異なる結果を返していました。 ASP.NET MVCは抽象 ActionResult クラスを使用し、Web APIは IHttpActionResult インターフェイスを使用しました。インターフェースを使用すると、とりわけ、lot結果のテストとモックが容易になります。また、それを実装するクラスは、潜在的に不要なプロパティと基本メソッドを処理する必要がないことも意味します。

ASP.NET Coreでは、Webフレームワーク、スタック全体が再設計され、結果用の単一の基本インターフェイスを持つ単一のスタックが存在します IActionResult 。コアの ActionResult がデフォルトの実装ですが、誰でも別の実装を作成できます。 RedirectResult たとえば、Contentプロパティは必要ないため、コンテンツプロパティはありません。

このインターフェイスは、適切なパッケージが追加されている限り、すべての.NET Standard 2.0ライブラリで使用できます。

ただし、MVCのActionResultもWeb APIのIHttpActionResultも実装しないため、ASP.NET MVC 6またはWeb API 2プロジェクトで実際の戻り値の型として使用できるという意味ではありません。具体的なIActionResultインスタンスから具体的なMVC ActionResultまたはWeb API IHttpActionResultインスタンスにマップするコードを記述する必要があります。

ただし、メインプロジェクトがASP.NET Coreの場合は、フルフレームワークでもコアフレームワークでも、インターフェイスを使用できます。

。NET標準

.NET Standardは、特定のランタイムではなくAPI仕様のセットです。各バージョンは、その標準バージョンに準拠するランタイムによって提供されるクラスとAPIのセットを指定します。 .NET Standard 2.0ライブラリを作成すると、コードは2.0バージョンで定義されたクラスとAPIを使用できるようになります。

インターフェースのみを追加

IActionResultは.NET Standard 2.0の一部ではありません。パッケージ Microsoft.AspNetCore.Mvc.Abstractions によって提供されます。

5

解決。

機能させるには、Microsoft.AspNetCore.Mvcパッケージをインストールする必要がありました。 Sry私の初心者向けの質問にご協力いただき、ありがとうございました。

編集:@PanagiotisKanavosは、IActionResultのMicrosoft.AspNetCoreMvc.Abstractionsパッケージで十分に書き込みます。それ以上に他のものが必要だったので、パッケージ全体に行きました。

2
jagge123

.netにも存在しますか? .netコアにのみ存在するようです。

Microsoftのソース:

https://docs.Microsoft.com/en-us/dotnet/api/Microsoft.aspnetcore.mvc.iactionresult?view=aspnetcore-2.1

そのページの「対象」を参照してください。

0
ispiro