use*_*126 8 model-binding asp.net-mvc-4 asp.net-web-api
我在某些模型中使用了一个子模型类(UserInfo),它应包含一些与用户相关的信息.例如,该子模型可用于各种模型
public class Model
{
int string Value { get; set; }
public UserInfo User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个模型绑定器并在WebApiConfig中注册了它
config.BindParameter(typeof(UserInfo), new UserModelBinder());
Run Code Online (Sandbox Code Playgroud)
问题是WebApi处理管道没有调用UserModelBinder.似乎没有为子模型调用这些模型绑定器.我错过了什么吗?
看看这个问题What is the相当于MVC的DefaultModelBinder in ASP.net Web API? 有关绑定发生位置的一些详细信息。
我怀疑你的消息Model
是在消息正文中传递的?
如果是,那么 WebApi 将使用格式化程序来反序列化您的类型并处理模型,默认值为XmlMediaTypeFormatter
,JsonMediaTypeFormatter
或FormUrlEncodedMediaTypeFormatter
。
如果您在正文中发布模型,那么根据您请求或接受的内容类型(application/xml、application/json 等),您可能需要自定义序列化器设置或包装或实现您自己的MediaTypeFormatter
.
如果您使用 application/json 那么您可以用JsonConverters
来自定义 UserInfo 类的序列化。这里有一个这样的例子:Web API ModelBinders - how to bind a property of your object different and here WebApi Json.NET custom date Handling
internal class UserInfoConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeOf(UserInfo);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
{
//
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
930 次 |
最近记录: |