ASP.NET HttpGet支持方法

时间:2017-11-06 16:35:46

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

我正在使用'dotnet new webapi'生成的默认样本创建一个asp.net core 2.0 webapi项目。

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

e.g。

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

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

但是

  1. 我在哪里可以找到可以发送和不发送内容的明确列表 回来?
  2. 为什么IEnumerable正常工作(这真的是我不知道什么是有效的返回类型?)
  3. 这是我在ASP.Net上的典型令人沮丧的故事,文章没有正确地告诉我答案,它们的日期是2013年,已经过时且不再有效,我只是继续绕圈子。我不知道我是在阅读核心2,核心1,完整的dotnet,mvc 5,mvc 6,它们都是不同的。使用Java更容易:(

    感谢。

1 个答案:

答案 0 :(得分: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或者#34;完整的框架&#34;,主要在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库。