.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
想要更快更方便的了解相关知识,可以关注微信公众号

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示