2

次のようにAPIメソッドを開発しようとしています

POST /ディナー/ディナーID/アプリケーション

これは POST /application と同じです (ここの POST リクエストに似ています)

/dinner/dinnerId/application が /application に行くようにルートを定義しました

   routes.MapHttpRoute(
                name:"DinnerApplicationApi",
                routeTemplate: "api/dinner/{dinnerId}/{controller}"
                );

そして、私のApplicationController(これはAPIコントローラーです)

[ModelValidationFilter]
        public HttpResponseMessage Post([FromBody]ApplicationApiModel application, int dinnerId)
        {
            //this will work when invoked from route /dinner/dinnerId/application and without ModelValidationFilter
            application.dinnerId = dinnerId;
            if (123456 == application.dinnerId)
            return new HttpResponseMessage(HttpStatusCode.OK);
            else
            {
                return new HttpResponseMessage(HttpStatusCode.BadRequest);
            }
        }

ここで、最初のルートの場合、ルートの値から dinnerId を設定する必要があります。ただし、2 番目のケースでは、dinnerId は本体から設定されます。WebApi でこれを達成するにはどうすればよいですか? 上記のように、ルートから dinnerId を設定していました。しかし、ModelValidationFilter を配置すると、dinnerId が ApplicationApiModel の必須フィールドであるため、リクエストは失敗します。

public class ApplicationApiModel 
    {
        [Required]
        public int DinnerId { get; set; }
        [Required]
        public AttendeeApiModel Attendee { get; set; }
        public string Message { get; set; }
        public string Password { get; set; }

    }

したがって、基本的には、両方のルートを使用して、ModelValidation 条件もパスできるようにしたいと考えています。

4

0 に答える 0