如何在 .NET Framework 4.6.1 中使用 IActionResult?

在过去的几个小时里,我一直在寻找答案,但没有任何成功。我对编程比较陌生,所以请对我放轻松:-)


我的问题是,我似乎无法在针对 .NET Framework 4.6.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,但我不明白为什么。


任何帮助将不胜感激,特别是如果有人可能知道如何进行这项工作。


当年话下
浏览 466回答 1
1回答

萧十郎

精简版您不能在完整框架 MVC 或 Web API 中使用 IActionResult 作为结果对象。您必须首先将其映射到适当的类型。你可能不应该在你的类库中使用 IActionResult,让核心项目处理返回类型但是ASP.NET Core 不需要 .NET Core 运行时,它也可以面向完整框架。也许您可以为您的主项目使用针对完整框架的 ASP.NET Core 项目?解释ASP.NET Core 是 ASP.NET 5 的“新”名称。它是一个新框架,它合并了 MVC 和 Web API 堆栈,并且可以在旧的 Full 框架和当时称为 DNXCore 的框架上运行。这两个名称都改为 ASP.NET Core 1.0 和 Core .NET 1.0,导致我们今天的困惑。在 ASP.NET Core 之前,ASP.NET MVC 和 Web API 是两个不同的堆栈,它们使用不同的控制器基类并返回不同的结果。ASP.NET MVC 使用抽象ActionResult类,Web API 使用IHttpActionResult接口。使用接口意味着测试和模拟结果要容易得多,等等。这也意味着实现它的类不必处理可能不需要的属性和基本方法。在Web 框架ASP.NET Core 中,整个堆栈都经过重新设计,现在只有一个堆栈和一个用于结果的基本接口IActionResult。Core 的ActionResult是默认实现,但任何人都可以创建不同的实现。例如RedirectResult不需要 Content 属性,所以它没有。只要添加了适当的包,此接口可用于每个 .NET Standard 2.0 库。这并不意味着它可以用作 ASP.NET MVC 6 或 Web API 2 项目中的实际返回类型,因为 MVC 的 ActionResult 和 Web API 的 IHttpActionResult 都没有实现它。必须编写代码才能从具体的 IActionResult 实例映射到具体的 MVC ActionResult 或 Web API IHttpActionResult 实例。但是,如果您的主要项目是 ASP.NET Core,则无论它在 Full 还是 Core 框架上运行,您都可以使用该接口。.NET 标准.NET Standard 是一组API 规范,而不是特定的运行时。每个版本都指定了一组类和 API,这些类和 API 应该由符合该标准版本的运行时提供。创建 .NET Standard 2.0 库时,意味着代码可以使用 2.0 版本中定义的任何类和 API。只添加接口IActionResult不是.NET Standard 2.0 的一部分。它由Microsoft.AspNetCore.Mvc.Abstractions包提供。
打开App,查看更多内容
随时随地看视频慕课网APP