jag*_*123 8 .net c# asp.net azure
在过去的几个小时里,我一直在寻找答案,没有任何成功.我对编程比较陌生,所以请放轻松我:-)
我的问题是,我的解决方案中的一个项目似乎无法使用IActionResult,该解决方案的目标是.NET Framework 4.6.1,但在针对.NET Standard 2.0的相同解决方案(不同项目)中我可以使用它.
我试图安装完全相同的Nuget包,除了目标框架外,一切看起来完全一样.
我只想使用IActionResults编写Azure Functions,如:
public static async Task<IActionResult> MyFuntcion([HttpTrigger(AuthorizationLevel.Function, "get", Route = null")]HttpRequest req, TraceWriter log)
{
//Do some stuff then redirect
}
Run Code Online (Sandbox Code Playgroud)
我猜我的目标框架是什么导致我无法使用IActionResult,但我不明白为什么.
任何帮助都将非常感激,特别是如果有人知道如何使这项工作.
谢谢
简洁版本
您不能在Full Framework 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接口。使用界面意味着测试和模拟结果要容易得多。这也意味着实现它的类不必处理可能不需要的属性和基本方法。
在ASP.NET Core(Web框架)中,整个堆栈都经过了重新设计,现在只有一个堆栈,带有用于结果的单个基本接口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。创建.NET Standard 2.0库时,这意味着代码可以使用2.0版本中定义的任何类和API。
仅添加界面
IActionResult 不属于.NET Standard 2.0。由包Microsoft.AspNetCore.Mvc.Abstractions提供。
| 归档时间: |
|
| 查看次数: |
4630 次 |
| 最近记录: |