Web API参数绑定

时间:2014-10-30 20:03:35

标签: asp.net-web-api asp.net-web-api2

请求有效负载不会被转换为自定义请求对象。

有效载荷

appl5=MC~IC&i~PhoneToPhone~inet_ptt_cb_phn~1=440&inet_ptt_cb_phn~3=7406&i~PhoneToPhone~inet_ptt_cb_delay=0&BeenHere=TRUE

它在keyvalue对中有〜(在键和值中都有)。

我有一个请求模型,将输入参数转换为avalid对象。

注意:我的C#属性中没有〜。 (我可以吗?)

My Post方法具有以下代码

public HttpResponseMessage Post(ClientRequest request)
    {
        HttpResponseMessage response;

        try
        {
            ProcessRequest target = new ProcessRequest(myRepository, myService);
            response = target.Process(request);

        }
        catch (Exception exception)
        {
            response = Request.CreateErrorResponse(HttpStatusCode.NotFound, exception.Message);
            //TODO : Log Exception.
        }

        return response;
    }

模型

public class ClientRequest      
{
        public string Appl5 { get; set; }
        public string I_PhoneToPhone_inet_ptt_cb_phn_1 { get; set; }
        public string I_PhoneToPhone_inet_ptt_cb_delay { get; set; }
        public string Inet_ptt_cb_phn_3 { get; set; }
        public string BeenHere { get; set; }

}

我的请求对象没有i~PhoneToPhone~inet_ptt_cb_phn~1的值,它为null。

我的理解是模型绑定没有发生,因为有效负载密钥不匹配 与我的模型(ClientRequest)没有〜为我~ThoneToPhone~inet_ptt_cb_phn~1 而我有i_PhoneToPhone_inet_ptt_cb_phn_1

我应该使用自定义绑定吗?

1 个答案:

答案 0 :(得分:0)

最后,添加了自定义模型绑定器

public class PostParameterModelBinder:IModelBinder     {

    bool IModelBinder.BindModel(System.Web.Http.Controllers.HttpActionContext actionContext, ModelBindingContext bindingContext)
    {
        bool success = false;

        if (bindingContext.ModelType == typeof(ClientRequest))
        {
            NameValueCollection postData = null;

            postData = actionContext.Request.Content.ReadAsFormDataAsync().Result;

            ClientRequest clientrequest = MapPostDataToRequest(postData);

            bindingContext.Model = clientrequest;

            success = true;
        }

        return success;
    }
 }

}