ASP . net CoreのAPI でHello Worldする

まず、恒例のプロジェクト作成から

テンプレートとしてすでにソースが用意されてるので、少しそこを見てみる。特定の URL を叩くと、天気情報を返却するAPIがテンプレートとして用意されているようだ。デバッグ実行する。

WeatherForecastというコントローラとデータモデルがある。
コントローラでGetに対応するメソッドでがありWeatherForecastのデータモデルのコレクションをreturnしている。
データがjson形式にシリアライズされて出力されているのがわかる。
これはどこでjsonに暗黙的にシリアライズされているのだろうか?

たぶん以下の内容が関係してくるのかな。
https://docs.microsoft.com/ja-jp/aspnet/core/web-api/action-return-types?view=aspnetcore-3.1

Hello World用のコントローラを作る

Controllerのフォルダで右クリックして追加→コントローラを選択する。

APIコントローラの空を作る

空のAPIを選んでも、何かしら準備が必要のようだ。

よし、できた。

ゲットメソッドだけ作ってみる。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebAPIForHellowWorld.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class HelloWorldController : ControllerBase
    {
        [HttpGet]
        public string Get()
        {
            return "Hello World";
        }
    }
}

デバッグ実行すると、できた。
ただ、json形式じゃないな。
この後でjson形式で出力する方法も書いておく。

json形式でHelloWorldを出力する

以下のようにObjectで返してもjson形式で返却できる。
WeatherForecast で見たように、自分で定義したModelもシリアライズして返してくれます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebAPIForHellowWorld.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class HelloWorldController : ControllerBase
    {
        [HttpGet]
        public object Get()
        {
            return new { DisplayValue = "Hello World", };
        }
    }
}

帰ってくるjsonはこんな感じでした。

{"displayValue":"Hello World"}

デバッグ時に実行される初回アクセスのURLを変更する方法

ところで、URLは自分で打ち込む必要がある。
https://localhost:44327/api/HelloWorld

[Route("api/[controller]")]

このアトリビュートと実際に打ち込んだURLを比べて推測することができると思う。
先ほど作ったコントローラ[HelloWorldController.cs]の前部分が[HelloWorld]がapi/の後に書くURLとなる。

デバッグ実行したら、初期で飛ばされるURLは
https://localhost:44327/WeatherForecast
となっていたはずです。
これを変更する方法は
ソリューションエクスプローラにあるプロジェクトのプロパティを選択
デバッグを選択してブラウザの起動にある[ WeatherForecast ]を変更すればいいです。

今回の例でいうと、以下のように修正すればOKです。
api/HelloWorld

C#C#

Posted by takumioda