Repository navigation
OTR_WebAPI
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
ASP.NET Core(net10.0)で Open 棟梁の Web API サーバを作り、.NET から呼ぶ方式。
- サーバは OAuth2 のリソースサーバ(
Authorization: Bearerヘッダで都度認証。Cookie・セッションは使わない)。 - B 層・D 層は、画面のアプリと同じものを使う。
- OAuth2 / OIDC アーキテクチャ(Frontend、WebAPI、汎用認証サイト)でソリューションを組む際の、バックエンドの基本になる(ソリューション提供のサポート)。
- 通信制御(サービス論理名で WCF などを切り替える仕組み)とは別物である。
素の ControllerBase に属性を 4 つ付ける。
[EnableCors]
[ApiController]
[MyBaseAsyncApiController(httpAuthHeader: EnumHttpAuthHeader.None | EnumHttpAuthHeader.Bearer)]
[Route("api/[controller]/[action]")]
public class BatchUpdateController : ControllerBase
{
[HttpGet]
public string test() => "test"; // 疎通確認用(DB を使わない)
[HttpPost]
public async Task<IActionResult> SelectCount()
{
MyBaseAsyncApiController.GetClaims(
out string userName, out _, out _, out string ipAddress);
var pv = new SuppliersParameterValue(
"BatchUpdateController", "-", "SelectCount", "SelectCount", new MyUserInfo(userName, ipAddress));
var rv = (SuppliersReturnValue)await new SuppliersLayerB().DoBusinessLogicAsync(
pv, DbEnum.IsolationLevelEnum.DefaultTransaction);
// camelCase の JSON で返す
return this.Content(JsonConvert.SerializeObject(new { Count = rv.Count }, this.JSS));
}
}-
[MyBaseAsyncApiController](親クラス2)が、認証・例外・アクション前後の処理を担う。 - クレーム(ユーザ名、ロール、スコープ、IP アドレス)は
GetClaimsで取り出し、MyUserInfoを作って引数クラスで B 層に渡す。 - 業務エラーの応答は形を固定する:
{ errorMessageID, errorMessage, errorInfo }。 -
[ValidateAntiForgeryToken]は付けない(Bearer ヘッダはブラウザが自動で付けないので、CSRF は成立しない)。
- エンドポイントは
http(s)://<host>/api/<controller>/<action>。疎通はGET .../test、業務はPOST。 - 本文はサーバの受け方に合わせる(
[FromBody]なら JSON、[FromForm]ならフォーム)。 - 認証は
Authorization: Bearer <token>。トークンは IdP から取得する(OAuth2 / OIDC クライアント)。コードに直書きしない。 - 応答は状態コードと「形」で判定する。 本文の部分一致だけで判定すると、エラー・ページの HTML で誤判定する。4xx / 5xx でも本文を読む。
一覧を編集して戻す場合は、DataTable を DTTables の JSON でやり取りする。
// 送る:変更前の値も保持する
DTTables dtts = new DTTables();
dtts.Add(DTTable.FromDataTable(dt, keepOriginal: true));
string json = DTTables.DTTablesToJson(dtts);
// 受け取る
DataTable dt2 = DTTables.JsonToDTTables(json).ToDataTable(); // RowState と Original が戻る-
keepOriginal: trueで送ると、往復後もRowStateと変更前の値が残り、サーバ側の楽観排他が成立する(DataTable によるバッチ更新)。 - 素の JSON で
DataTableをやり取りすると、RowStateと変更前の値が落ちる。
- OpenAPI(
/openapi/v1.json)と CORS を構成する。 - コンテナで動かす手順はDocker対応(
Docker/ASPNETWebService/)。
- サーバはスキル
opentouryo-webapi-server、クライアントはopentouryo-webapi-clientを使わせる。 - 認証方式(既定は認証なし、Bearer は JWT 検証の雛形のみ)はプロジェクトで決める。エージェントに推測させず、
PROJECT-POLICY.mdで確認させる。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。