获取请求来自SMS API传递报告,以获取有关SMS的信息。
将发布到我的api的变量之一是:?err-code = 0。是否可以在.Net Web API解决方案中执行此操作,还是应该使用其他语言?
Web API获取方法:
public HttpResponseMessage Get([FromUri]TestModel testingDetials)
{
return Request.CreateResponse(System.Net.HttpStatusCode.OK);
}
模型
public class TestModel
{
public string foo { get; set; }
public string err_code { get;set; }
}
我尝试了在这个网站上找到的各种解决方案,它们都不像将[JsonProperty]和[DataMember]添加到err_code属性那样。
答案 0 :(得分:1)
如果以JSON格式收到请求,您可以使用[JsonProperty(PropertyName = "err-code")]
。这是因为JsonProperty是Newtonsoft JSON序列化程序库的一部分,这是Web API用于反序列化JSON的。如果请求不是JSON,则不在管道中使用该库。
正如您所提到的,您可以使用HttpContext。如果我没记错的话,MVC中的模型绑定会将' - '转换为'_',但我可能错了。无论继续使用强类型模型,我建议使用模型绑定。这基本上是在http上下文和模型之间编写自定义映射。您甚至可以扩展通常的方法,并通过编写基于约定的方法将类似“错误代码”的内容映射到名为ErrCode的属性。这是一个例子,滚动一下:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api 快乐的编码! (通过我会提供一个完整的答案......为了......有一个完整的答案)
答案 1 :(得分:1)
对于我的情况,我创建了一个模型绑定器,将var“_”转换为“ - ”并使用反射设置值。这个答案仅供参考。 以下是代码:(此解决方案用于Web API而非MVC)
public class SmsReceiptModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType != typeof(SmsReceiptModel))
{
return false;
}
Type t = typeof(SmsReceiptModel);
var smsDetails = new SmsReceiptModel();
foreach (var prop in t.GetProperties())
{
string propName = prop.Name.Replace('_', '-');
var currVal = bindingContext.ValueProvider.GetValue(
propName);
if (currVal != null)
prop.SetValue(smsDetails, Convert.ChangeType(currVal.RawValue, prop.PropertyType), null);
}
bindingContext.Model = smsDetails;
return true;
}
}