TokugawaTakeshi / CrossPlatformOrganizerAppplication

0 stars 0 forks source link

「ControllerBase.Ok」JSON化をしない #39

Closed TokugawaTakeshi closed 1 year ago

TokugawaTakeshi commented 1 year ago
[Route("api/tasks")]
[ApiController]
public class TaskController : ControllerBase
{

  // ...

  [HttpGet("selection")]
  public async System.Threading.Tasks.Task<ActionResult<ITaskGateway.SelectionRetrieving.ResponseData>> Get(
    [FromQuery(Name="pagination_page_number")] [Required] uint paginationPageNumber,
    [FromQuery(Name="items_count_per_pagination_page")] [Required] uint itemsCountPerPaginationPage,
    [FromQuery(Name="searching_by_full_or_partial_title")] string? searchingByFullOrPartialTitle
  ) {
    return base.Ok(
      await this.taskGateway.RetrieveSelection(
        new ITaskGateway.SelectionRetrieving.RequestParameters
        {
          PaginationPageNumber = paginationPageNumber,
          ItemsCountPerPaginationPage = itemsCountPerPaginationPage,
          SearchingByFullOrPartialTitle = searchingByFullOrPartialTitle
        })
    );
  }

}

RetrieveSelectionはデータを返していると確認しましたが、リクエストを投げてみると、リスポンスデータは空オブジェクトです。

Image

資料によると、JSONは規定のコンテントタイプになっています。

By default, the built-in helper method ControllerBase.Ok returns JSON-formatted data:

https://learn.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-7.0

RetrieveSelectionが返している奴だと、JSON化できないという事ですか?

ところで、資料通り「Newtonsoft.Json」の追加をやってみました。

The default JSON formatters use System.Text.Json. To use the Newtonsoft.Json-based formatters, install the Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet package and configure it in Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddNewtonsoftJson();

AddNewtonsoftJsonはとこからのメソッドですか?私の環境だと、

Cannot resolve symbol 'AddNewtonsoftJson'

Image

Newtonsoft.Jsonを導入しても直りませんでした。

gummoni commented 1 year ago

試しに新規プロジェクトでWebアプリケーションを作って、「AddNewtonsoftJson」の追加を試みてみました。

Image

新規プロジェクトでは追加がうまくできたので、 プロジェクトが、以下のプロジェクトで生成したものかチェックしてみてください。 もしかすると、クラスライブラリなどを行った際に必要なMVCフレームワーク関連のライブラリで 「Microsoft.Extensions.DependencyInjection」が含まれておらず、 DIができない状態(上記のようなシンボル未解決エラー)が出ているのかもしれません。

Image

TokugawaTakeshi commented 1 year ago

なるほど、名スペースが違っていましたのです。Microsoft.AspNetCore.Mvc.NewtonsoftJsonの方必要だったんですね。ありがとう。