0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MiniAPI(三):Response

0
Last updated at Posted at 2024-02-14

MiniAPIでは、レスポンスの返却データには3つの形式があります。IResult、string、jsonです:
ValueTask - これにはstringおよびTaskが含まれます
T(任意の他のタイプ、フロントエンドに返す際にjsonに変換されます)- これにはTaskおよびValueTaskが含まれます
IResultに基づく - これにはTaskおよびValueTaskが含まれます
1.文字列
文字列の返却は非常にシンプルです。結果を文字列に変換して返却するだけです。以下のようになります:

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

返却結果
alt 画像
Content-Typeタイプ
alt 画像
2.Json
jsonも難しくありません。オブジェクトを返却するだけです

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

結果
alt 画像
Content-Type
alt 画像
3.IResult
string、jsonに比べて、Resultははるかに豊かです。公式が提供するのは以下の通りです:
alt 画像
これにより、多くのシナリオに適応できます。例えば、認証のログインやログアウト、ファイルのダウンロード、リダイレクト(Redirect,LocalRedirect,RedirectToRoute)、さまざまなリターンステータスなどがあります。もちろん、Text,Jsonの返却も含まれます。
内蔵されたもの以外にも、結果を拡張することが可能です。yamlタイプの結果を返す例を見てみましょう。
拡張クラス(ここでYamlDotNetというサードパーティのライブラリを使ってオブジェクトをyaml文字列にシリアライズします)

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 })
})));

結果
alt 画像
content-type
alt 画像
(Translated by GPT)

元のリンク:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247484799&idx=1&sn=131280b3344cc00b4f7ef1aaf7528f5c&chksm=9f005a55a877d3431a25d03799a3d996a59c8d21b907632f3947edbea56ceafe5f24eca397a3&token=2050451386&lang=zh_CN#rd

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?