次のように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 条件もパスできるようにしたいと考えています。