ASP.NET CoreでWeb APIもついでに作成してみた

samatsu 6/12/2016 12609 N/A Dot NET Core

ASP.NET Coreに対応したシンプルなWebアプリケーションを空のテンプレートから作成する手順をこちらに記載しました。そのプロジェクトで次いでにWeb APIも作成したのでメモを記載します。

1. Web API コントローラーを作成する

ASP.NET MVCを開発できるようになったのであとは特に難しいことはありません。新しくWeb APIコントローラークラスを作成します。今回の例では BookApiController という名前でApiコントローラーを作成しました。

作成されたクラスを確認するとわかるのですが、ApiControllerではなくControllerクラスを継承しています。ASP.NET CoreではWeb APIも通常のMVCコントローラーもともに Controller クラスを継承するようになっています。

あとは適当に変更します。Get メソッドをデフォルトで作成された内容から次のように変更しました。Bookクラスのインスタンスもしくは一覧を返すようにしています。ASP.NETのWeb APIと異なり、GetやPostなどHTTPのメソッドに対応する名前をメソッド名に使っていても、HttpGetやHttpPost などの対応するAttributeで装飾する必要があります。これは専用のApiControllerをベースクラスとして使わなくなったことによる影響です。

[Route("api/[controller]")]
public class BookApiController : Controller
{
    // GET: api/values
    [HttpGet]
    public IEnumerable<Book> Get()
    {
        List<Book> books = new List<Book>()
        {
            new Book { Title = "book1" },
            new Book { Title = "book2" }
        };
        return books;
    }

    // GET api/values/5
    [HttpGet("{id}")]
    public Book Get(int id)
    {
        return new Book();
    }

    // POST api/values
    [HttpPost]
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    [HttpPut("{id}")]
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/values/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
    }
}

Bookクラスは次のように定義されています。

public class Book
{
    public string Title { get; set; } = "Sample Book";
    public DateTime PublishDate { get; set; } = DateTime.Now;
}

F5ボタンをクリックしてデバッグ実行してください。 /api/BookApi/ とブラウザーのパスを指定すると、Bookオブジェクトの一覧がJSON形式で出力されます。

/api/BookApi/2 のように id を指定すると下図のように JSON形式のBookのデータが出力されます

ASP.NET Core の Web APIはMVCの場合と同様、特に学習コストなく作成することができそうです。