1

おはようございます、モデルで TryValidateModel を使用して、特定の必須フィールドが満たされていることを確認しています。ドキュメントによると、有効な場合は true を返し、そうでない場合は false を返します。

無効なモデルで false を返すのではなく、.net コア API でこれを使用すると、例外が発生し、独自の JSON が返され、それ以上のコード実行が停止するようです。

独自のエラーをスローするのではなく、単に false を返すようにして、独自の JSON を返す方法はありますか。

検証が失敗すると、ブレークポイントを使用できず、次の JSON が返されます。

{
   "errors": {"RepairOrder.ReferenceNumber": ["The ReferenceNumber field is required."]},
   "type": null,
   "title": "One or more validation errors occurred.",
   "status": 400,
   "detail": null,
   "instance": null,
   "extensions": {"traceId": "|514b9bb2-4999b11a49fa3351."}
}

編集:以下の要求されたコードとして

using System.ComponentModel.DataAnnotations;

namespace Bright.Models
{
    public class CreateRepairOrderRequest
    {
        public RepairOrder RepairOrder { get; set; }
    }

    public class RepairOrder
    {
        [Required]
        public string ReferenceNumber { get; set; }
    }
}

using Bright.Models;
using Microsoft.AspNetCore.Mvc;


namespace Bright.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class CreateRepairOrderController : ControllerBase
    {

        [HttpPost]
        public CreateRepairOrderResponse Post(CreateRepairOrderRequest createRequest)
        {
            if(!TryValidateModel(createRequest))
                    return new CreateRepairOrderResponse() { AckMessage = "Creation Failed: Missing required field", RetCode = "1" }; //This line is never executed when TryValidateModel fails
        }
}
4

1 に答える 1

2

ApiControllerクラスのValidate( ) メソッドを使用して、モデルを手動で検証し、ModelStateを設定できます。

using Bright.Models;
using Microsoft.AspNetCore.Mvc;


namespace Bright.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class CreateRepairOrderController : ControllerBase
    {

        [HttpPost]
        public CreateRepairOrderResponse Post(CreateRepairOrderRequest createRequest)
        {
            this.Validate(createRequest);

            if (!ModelState.IsValid) 
            {
             //return BadRequest(ModelState);
             return new CreateRepairOrderResponse() { AckMessage = "Creation Failed: Missing required field", RetCode = "1" };
            }

        }
}
于 2019-08-21T11:16:24.657 に答える