.NET6之MiniAPI(三):Response
阿新 • • 發佈:2022-05-11
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
想要更快更方便的瞭解相關知識,可以關注微信公眾號