我可以访问数据的.NET网页API模型绑定无法处理?(Can I get access to the

2019-09-26 13:45发布

我有一个接收JSON对象,并使用标准模型绑定功能将它们绑定到我的POCO对象在我的控制器方法容易使用MVC 4个Web API应用程序。

这一切的伟大工程,在JSON结构,我直接接收地图我的POCO。 例如我有一个控制器的方法

 public HttpResponseMessage Post(DeviceConfigurationDto deviceConfiguration)

和DeviceConfigurationDto是

public class DeviceConfigurationDto
    {
        public long Timestamp { get; set; }
        public string DeviceType { get; set; }
        public string AssetName { get; set; }
    }
}

我张贴以下JSON

 {
        "Timestamp": 234234234,
        "DeviceType": "A555tom",
        "AssetName": "HV103"
    }

内置的模型绑定功能确实有变化的工作,比如额外的字段或丢失的领域等等的一个不错的工作。 但是,如果你把它推到远。 例如,通过发布以下JSON

    [
    {
        "Fields4": "asda",
        "Timestamp": 234234234,
        "DeviceType": "A555tom",
        "AssetName": "HV103"
    },
    {
        "Timestamp": 234234234,
        "DeviceType": "A555tom",
        "DedviceType": "A555tom",
        "AssetName": "HV103"
    }
]

它最终落在了我结束了与该参数为我的方法是零。

是否有模型结合时,如预期的数据,但后来也为我提供了去,这是为模型绑定一个问题数据的能力,这样我就可以登录,我收到请求的工作方式未匹配我所期待的?

谢谢

Answer 1:

要做到这一点的方法之一是使用自定义ActionFilter。 由于被执行的动作过滤器之前模型绑定情况,您可以在您的自定义操作过滤器让您的操作参数(S)。

例如:

public class LogFailToModelBindArgActionFilterAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext context)
    {
        var deviceConfigurationArg = context.ActionArguments["deviceConfiguration"];
        if (deviceConfigurationArg == null) // fail to model bind data to argument ...
        {
            var jsonContent = context.Request.Content.ReadAsStringAsync().Result; // calling .Result here for sake of simplicity...
            Log(jsonContent);
        }
    }
}

行动:

    [LogFailToModelBindArgActionFilter]
    public HttpResponseMessage Post(DeviceConfigurationDto deviceConfiguration)
    {...}


文章来源: Can I get access to the data that the .net web api model binding was not able to handle?