【ASP.NET Core Web】JSONを受け取ってJSONを返す
2023-8-25 | .NET
ASP.NET Core WebでJSONを受け取ってJSONを返したい!
概要
今回の記事では、ASP.NET Core WebでJSONを受け取ってJSONを返す手順を掲載する。
仕様書
環境
- .NET 7.0
手順書
[FromBody]
を使う方法と使わない方法の2パターンでJSONを受け取ってJSONを返すログイン処理っぽい例を載せる。
[FromBody]
を使う方法
[FromBody]
を使う場合、予め受け取るJSONのフォーマットをクラスで宣言する。厳密に処理できる感じ。
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;
namespace Sample.Controllers
{
public class SampleController : Controller
{
public class JsonLogin
{
public string id { get; set; }
public string name { get; set; }
}
[HttpPost]
[AllowAnonymous]
public JsonResult Index([FromBody] JsonLogin jsonLogin)
{
if (jsonLogin == null) {
// 受信したJSONが読み取れない場合
return Json(
new
{
code = "400",
message = "Bad Request.",
}
);
}
// ログイン処理的な
var result = Login(jsonLogin.id, jsonLogin.password);
if (result == null)
{
// idとpasswordのいずれかあるいは両方が間違ってる場合
return Json(
new
{
code = "401",
message = "Bad Request.",
}
);
}
// ログインに成功した場合
return Json(
new
{
code = "200",
message = "OK",
}
);
}
}
}
[FromBody]
を使わない方法
[FromBody]
を使わない場合は。JSONを受信してからパース後、必要なパラメーターの取得を試行する。柔軟に処理できる感じ。
この記事では標準のSystem.Text.Json
を使ってJSONを処理してるんだけども、Newtonsoft.Json
でも処理できる。
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;
using System.Threading.Tasks;
namespace Sample.Controllers
{
public class SampleController : Controller
{
[HttpPost]
[AllowAnonymous]
public async Task<JsonResult> Index()
{
using var reader = new StreamReader(Request.Body);
var body = await reader.ReadToEndAsync();
using var jsonDoc = JsonDocument.Parse(body);
JsonElement root = jsonDoc.RootElement;
// 受信したJSONのルートにidとpasswordが含まれてるか判定する
if (
root.TryGetProperty("id", out JsonElement idElement)
&& root.TryGetProperty("password", out JsonElement passwordElement))
{
string id = idElement.GetString();
string password = passwordElement.GetString();
// ログイン処理的な
var result = Login(id, password);
if (result == null)
{
// idとpasswordのいずれかあるいは両方が間違ってる場合
return Json(
new
{
code = "401",
message = "Bad Request.",
}
);
}
// ログインに成功した場合
return Json(
new
{
code = "200",
message = "OK",
}
);
}
// 受信したJSONに必須の情報(idとpassword)が含まれてない場合
return Json(
new
{
code = "400",
message = "Bad Request.",
}
);
}
}
}
まとめ(感想文)
厳密か柔軟かを選択する感じ。
簡単なAPIを作るのに使えるかもね!