Мы создаем RestService с Asp.Net WebApi. Но по какой-то причине свойство Name
игнорируется в атрибуте DataMember
при попытке десериализовать сложное свойство с атрибутом [FromURI]
.
Например, у нас может быть: Метод:
public IHttpActionResult Get([FromUri]User user)
Модель:
[DataContract]
public class User
{
[DataMember(Name = "username")]
public string Username{ get; set; }
[DataMember(Name = "isActive", IsRequired = false)]
public bool? Active { get; set; }
}
При десериализации user
мы получаем имя пользователя, как ожидалось, но null
для Active
. С другой стороны, при сериализации данных мы получаем как isActive
, так и username
, как и ожидалось. Если мы отправляем запрос с Active
в строке запроса, он работает как ожидалось.
Это, очевидно, проблема с IModelBinder
. По какой-то причине он не использует свойство DataMember
Name
. Я проверил, какие форматиры включены, и зарегистрировано 4 стандартных:
System.Net.Http.Formatting.JsonMediaTypeFormatter
System.Net.Http.Formatting.XmlMediaTypeFormatter
System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter
System.Net.Http.Formatting.JQueryMvcFormUrlEncodedFormatter
У меня нет способа проверить, какой из них используется по запросу. Я бы предположил, что его FormUrlEncodedMediaTypeFormatter
, но я не могу быть уверен. Кроме того, я не уверен, поддерживает ли он даже свойство Name
.
Я уже проверил решение, и ближайшая тема, которую я смог найти, была Имя WebAPI DataMember, которое не используется при де-сериализации через application/x-www-form-urlencoded, но он не использует свойство [FromURI]
, но application/x-www-form-urlencoded
, и он не был действительно решен.
Любые идеи, указатели или предложения будут высоко оценены.