首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.NET框架4.6.1中使用IActionResult?

如何在.NET框架4.6.1中使用IActionResult?
EN

Stack Overflow用户
提问于 2018-07-31 19:33:54
回答 3查看 12.3K关注 0票数 8

在过去的几个小时里,我一直在寻找这个问题的答案,但没有任何结果。我是编程新手,所以请对我手下留情:-)

我的问题是,我似乎不能在我的解决方案中的一个项目中使用IActionResult,该解决方案针对.NET框架4.6.1,但在同一解决方案(不同的项目)中,针对.NET标准2.0,我可以使用它。

我已经尝试安装了完全相同的Nuget包,除了目标框架之外,一切看起来都是完全相同的。

我只想使用IActionResults编写Azure函数,如下所示:

代码语言:javascript
复制
 public static async Task<IActionResult> MyFuntcion([HttpTrigger(AuthorizationLevel.Function, "get", Route = null")]HttpRequest req, TraceWriter log)
    {

      //Do some stuff then redirect

    }

我猜是我的目标框架导致我不能使用IActionResult,但我不明白为什么。

任何帮助都是非常感谢的,特别是如果一个人可能知道如何工作的话。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-31 20:38:00

短版

您不能在完整的Framework MVC或Web API中使用IActionResult作为结果对象。您必须首先将其映射到适当的类型。您可能不应该在类库中使用IActionResult,而是让核心项目处理返回类型

但是 ASP.NET核心不需要.NET核心运行时,它也可以针对整个框架。也许你可以为你的主项目使用一个针对完整框架的ASP.NET核心项目?

说明

DNXCore是ASP.NET 5的“新”名称,它是一个合并了ASP.NET和Web API堆栈的新框架,构建时既可以在旧的完整框架上运行,也可以在当时的DNXCore上运行。这两个名称都改为ASP.NET核心1.0和核心.NET 1.0,导致了我们今天的混淆。

在ASP.NET核心之前,ASP.NET MVC和Web API是两个不同的堆栈,它们使用不同的控制器基类,返回不同的结果。ASP.NET MVC使用抽象的ActionResult类,Web API使用IHttpActionResult接口。使用接口意味着测试和模拟结果要容易得多。这也意味着实现它的类不必处理可能不需要的属性和基方法。

ASP.NET核心中,web框架重新设计了整个堆栈,现在只有一个堆栈,其中包含一个基本接口,即IActionResult。Core的ActionResult是默认实现,但任何人都可以创建不同的实现。例如,RedirectResult不需要内容属性,所以它没有内容属性。

只要添加了适当的包,每个.NET标准2.0库都可以使用该接口。

但这并不意味着它可以用作MVCMVC6或WebAPI2项目中的实际返回类型,因为ASP.NET的ActionResult和Web的IHttpActionResult都没有实现它。人们必须编写代码来从具体的IActionResult实例映射到具体的MVC ActionResult或Web API IHttpActionResult实例。

如果您的主项目是ASP.NET核心,那么无论它在完整的还是核心的框架上运行,您都可以使用该接口。

.NET标准版

.NET标准是一组应用程序接口规范,而不是特定的运行时。每个版本都指定了一组类和API,这些类和API应该由符合该标准版本的运行时提供。当创建.NET标准2.0库时,这意味着代码可以使用2.0版本中定义的任何类和API。

仅添加接口的

IActionResult不是.NET标准2.0的一部分。它是由Microsoft.AspNetCore.Mvc.Abstractions包提供的。

票数 6
EN

Stack Overflow用户

发布于 2018-07-31 20:09:22

解决方案。

我需要安装Microsoft.AspNetCore.Mvc包才能让它工作。谢谢你给我的新手问题,非常感谢你的帮助。

编辑: As @PanagiotisKanavos用IActionResult的Microsoft.AspNetCoreMvc.Abstractions包写得够多了。除了这些还需要一些其他的东西,所以就去买了整个包。

票数 2
EN

Stack Overflow用户

发布于 2018-07-31 19:41:15

它甚至存在于.net中吗?它似乎只存在于.net核心中。

Microsoft上的来源:

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

请参阅该页上的“适用于”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51612406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档