如何从Url和Body创建Web Api模型?

时间:2012-09-27 18:11:10

标签: asp.net-mvc rest asp.net-web-api

我正在寻找如下开发api方法

POST /晚餐/晚餐/应用

与POST / application相同(类似于POST请求here

我定义了一条路线,以便/ 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。但在第二种情况下,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条件也会通过。

0 个答案:

没有答案