【问题标题】:ASP.NET HttpGet supported return types from methods [closed]ASP.NET HttpGet 支持的方法返回类型 [关闭]
【发布时间】:2017-11-07 03:57:25
【问题描述】:

我正在创建一个 asp.net core 2.0 webapi 项目,使用从“dotnet new webapi”生成的默认示例。

在为您创建的默认 GET 方法中,我可以看到 Get 方法很乐意返回值类型和 IEnumerable,但是“开箱即用”支持哪些返回类型以响应典型的接受标头类型。我已经搜索过,但我根本找不到任何东西。

例如

    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

搜索我还可以看到你可以返回一个IActionResult,你可以使用Ok和JSon方法使用默认的accept header或直接作为json返回数据。

但是

  1. 在哪里可以找到可以发送和不能发送的最终列表 回来了吗?
  2. 为什么 IEnumerable 有效(这真的是我不知道什么是有效的返回类型,什么不是有效的返回类型)?

这是我与 ASP.Net 的典型令人沮丧的故事,文章没有正确地告诉我答案,它们的日期是 2013 年并且已经过时并且不再有效,我只是继续兜圈子。我不知道我是否正在阅读有关核心 2、核心 1、完整 dotnet、mvc 5、mvc 6 的信息,它们都是不同的。使用 Java 就容易多了 :(

谢谢。

【问题讨论】:

  • 你可以返回任何你想要的东西,只要你可以序列化它(例如 JSON/XML)
  • 干杯。我只是对所有这些看起来正确但实际上完全错误的文章和 stackoverflow 问题感到困惑,因为它们适用于 webapi、mvc 等的不同实现,并且很难找到使用 .net 核心的当前基础的答案..
  • 我建议在谈论特定技术时不要刻薄。许多人使用并喜欢.Net,当您说它令人沮丧并说其他更好的东西时,他们不会倾向于提供帮助!话虽如此,PHP是垃圾......

标签: asp.net-mvc asp.net-web-api asp.net-core


【解决方案1】:

所有操作的返回类型为IActionResult。这可以通过任何数量的不同事物来满足,无论是实际的 *Result 类型(ViewResultContentResultJsonResultFileResult 等)还是任何可以转换为 *Result 类型的东西。例如,返回字符串通常会生成 ContentResult,而返回对象通常会导致序列化程序开始返回 JsonResult,并将对象序列化为 JSON。

无论长短,你几乎可以从一个动作中返回任何东西。该框架非常聪明,可以根据您返回的任何内容创建适当的结果对象。在您知道确切想要返回什么的情况下,您应该返回它。例如,如果您总是想要 JSON,则返回 Json(obj) 而不是 obj。但是,如果您想不知道它(返回 JSON XML),则直接返回对象,并让框架选择适当的序列化程序。

关于您对正在阅读的内容的混淆的附加说明:只有 ASP.NET Core 和 ASP.NET MVC。 MVC 只升级到主要版本 5。当您看到 MVC 6 被引用时,它实际上是 ASP.NET Core,但在它仍然是一个非常早期的预发布版本时。在通往 1.0 的过程中发生了很多变化,以至于任何引用 MVC 6 的东西在这一点上都应该被认为是完全没用的。 Core 2.0 对 Core 1.0 进行了许多重大的重大更改,因此一般来说,您在此时看到的任何参考 Core 1.X 的东西都应该在非常大的盐粒时采用。 可能有有用的信息,但很可能不再准确。因此,如果您要查找有关 ASP.NET Core 的信息,请查找 2.0。如果它是任何其他较小的版本,请仅在找不到更好的信息时使用它,然后准备好让事情不像描述的那样工作。再次,完全避免 MVC 6 信息。以前版本的 MVC 指的是仍然可用的 ASP.NET MVC,而不是 Core,如果您尝试构建 Core 应用程序,对您根本没有任何帮助。

最后,完整的 .NET 或“完整框架”主要在以 Core 1.X 为主题的文章和教程中被引用。当时,.NET Core 1.X 的 API 占用量相对较小,因此使用许多不同的库需要在完整的框架而不是 Core 上运行(您仍然可以构建 ASP.NET Core Web 应用程序 - 它只是实际上不会以 .NET Core 为目标)。但是,.NET Core 2.0 实现了 .NET Standard 2.0,它带来了与完整框架几乎完全一致的 API(除了大多数特定于 Windows 的 API)。因此,您现在几乎可以使用 .NET Core 2.0 引用任何 .NET 库。

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多