.NET6之Mini API【三、Response】

内容纲要

MiniAPI中,Response的返回数据有三种格式,IResult,string,json:

  • ValueTask<string> - 这包括 string 和 Task<string>
  • T(任何其他类型,返回前端时转成json)- 这包括 Task<T> 和 ValueTask<T>
  • 基于 IResult - 这包括 Task<IResult> 和 ValueTask<IResult>

1、字符串

返回字符串很简单,就是把结果转成字符串返回即可,如下:

app.MapGet("/hi", () => "Hellow Mini API");

返回结果

Content-Type类型

2、Json

json也不难,只要返回对象就可以

app.MapGet("/answers/{questionid}", (int questionId, ExamContext exam) => exam.Answers.Where(s => s.QuestionId == questionId));

结果

d819bba852d79984aeff410a49a79193.png

Content-Type

3、IResult

相对string,json,Result是就丰富的多,官方提供的如下:

这样就能适配很多场景了,比如认证的登录登出,文件下载,重定向(Redirect,LocalRedirect,RedirectToRoute),以及各种返回值状态,当然也包括返回Text,Json。

除了内置的,还可对结果进行扩展,看一个返回yaml类型的例子。

扩展类(这里引入了一个三方的对象序列化ymal字符串的库YamlDotNet)

static class ResultsExtensions
{
    public static IResult Yaml(this IResultExtensions resultExtensions, object yamlObject)
    {
        ArgumentNullException.ThrowIfNull(resultExtensions, nameof(resultExtensions));
        var serialzer = new YamlDotNet.Serialization.SerializerBuilder().Build();
        return new YamlResult(serialzer.Serialize(yamlObject));
    }
}
class YamlResult : IResult
{
    private readonly string _yaml;
    public YamlResult(string yaml)
    {
        _yaml = yaml;
    }
    public Task ExecuteAsync(HttpContext httpContext)
    {
        httpContext.Response.ContentType = "yaml";
        httpContext.Response.ContentLength = Encoding.UTF8.GetByteCount(_yaml);
        return httpContext.Response.WriteAsync(_yaml);
    }
}

使用扩展类

app.MapGet("/yaml/questions/{id}", (int id, ExamContext exam) =>
   Results.Extensions.Yaml(exam.Questions.Where(s => s.Id == id).Include("Answers").Select(s => new
   {
       s.Id,
       Question = s.Question1,
       s.Score,
       QuestionType = s.QuestionType.TypeName,
       SubjectType = s.SujectType.TypeName,
       Answers = s.Answers.Select(t => new { t.Id, Answer = t.Answer1 })
   }))
);

结果

content-type

全部.NET6之MiniAPI-PDF版本下载地址 https://club.51aspx.com/circle/10569.html

此图片的alt属性为空;文件名为20220624193314960.png

给TA打赏
共{{data.count}}人
人已打赏
.NET

.NET6之Mini API【二、Request】

2022-6-24 11:46:39

.NET

.NET6之Mini API【四、配置】

2022-6-27 19:03:31

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索