• .NET6之MiniAPI(三):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));

    结果

     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

     想要更快更方便的了解相关知识,可以关注微信公众号 
     
  • 相关阅读:
    C# 内存映射研究学习
    js Promise async await 学习研究
    js 字节数组转数字以及数字转字节数组
    C# 生成一个当前程序唯一的短字符串
    C# FileStream 读取大文件时ReadByte和Read的速度对比
    用一个数维护最多32个可叠加状态,比如权限的状态,既有“读”,又有“写”
    大牛干货:100条Unity基础小贴士
    Unity教程之-Unity3d移动平台性能优化专题(12):面板的设置
    Unity ShaderLab学习总结
    (转)【Unity技巧】Unity中的优化技术
  • 原文地址:https://www.cnblogs.com/ljknlb/p/16259764.html
Copyright © 2020-2023  润新知