Adm*_*vić 7 c# asp.net-web-api
我期待一个内容类型设置为的POST请求:
内容类型:application/x-www-form-urlencoded
请求正文如下所示:
如first_name =约翰&姓氏=香蕉
我对控制器的操作有这个签名:
[HttpPost]
public HttpResponseMessage Save(Actor actor)
{
....
}
Run Code Online (Sandbox Code Playgroud)
Actor类的位置为:
public class Actor
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法强制Web API绑定:
first_name => FirstName
last_name => LastName
我知道如何使用内容类型设置为application/json但不使用urlencoded的请求来执行此操作.
我 98% 确定(我查看了源代码)WebAPI 不支持它。
如果您确实需要支持不同的属性名称,您可以:
Actor向充当别名的类添加其他属性。
创建您自己的模型活页夹。
这是一个简单的模型活页夹:
public sealed class ActorDtoModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var actor = new Actor();
var firstNameValueResult = bindingContext.ValueProvider.GetValue(CreateFullPropertyName(bindingContext, "First_Name"));
if(firstNameValueResult != null) {
actor.FirstName = firstNameValueResult.AttemptedValue;
}
var lastNameValueResult = bindingContext.ValueProvider.GetValue(CreateFullPropertyName(bindingContext, "Last_Name"));
if(lastNameValueResult != null) {
actor.LastName = lastNameValueResult.AttemptedValue;
}
bindingContext.Model = actor;
bindingContext.ValidationNode.ValidateAllProperties = true;
return true;
}
private string CreateFullPropertyName(ModelBindingContext bindingContext, string propertyName)
{
if(string.IsNullOrEmpty(bindingContext.ModelName))
{
return propertyName;
}
return bindingContext.ModelName + "." + propertyName;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您准备好迎接挑战,可以尝试创建通用模型绑定器。
| 归档时间: |
|
| 查看次数: |
1966 次 |
| 最近记录: |