response的几种格式,response设置返回内容

首页 > 实用技巧 > 作者:YD1662024-01-17 13:45:23

3、IResult

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

response的几种格式,response设置返回内容(5)

这样就能适配很多场景了,比如认证的登录登出,文件下载,重定向(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 }) })) );

结果

response的几种格式,response设置返回内容(6)

content-type

response的几种格式,response设置返回内容(7)

,
上一页12末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.