По какой-то причине мой объект AttributeContract не передается от моего клиента к моему методу обслуживания правильно. Я могу успешно получить доступ к методу через вызов, но объект пуст. Любые предложения о том, что я делаю неправильно здесь?WCF REST Post Complex Object
Client
using (var client = new HttpClient())
{
string serviceCall = string.Format("{0}AttributeService.svc/AttributeDefinition/", _serviceLocation);
int attributeIdInt = Convert.ToInt32(attributeId);
int objectIdInt = Convert.ToInt32(objectId);
AttributeContract attributeContract = new AttributeContract()
{
AttributeId = attributeIdInt,
AttributeValue = attributeValue,
ObjectId = objectIdInt,
ObjectType = objectType
};
string attributeString = JsonConvert.SerializeObject(attributeContract);
string requestJsonString = "{ \"attribute\" : " + attributeString + " }";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, serviceCall);
request.Content = new StringContent(requestJsonString, Encoding.UTF8, "application/json");
HttpResponseMessage response = client.SendAsync(request).Result;
}
Контракт данных
[DataContract(Name = "AttributeContract")]
public class AttributeContract
{
[DataMember(Name = "AttributeId")]
public int AttributeId { get; set; }
[DataMember(Name = "Attribute")]
public string Attribute { get; set; }
[DataMember(Name = "AttributeValue")]
public string AttributeValue { get; set; }
[DataMember(Name = "ObjectId")]
public int ObjectId { get; set; }
[DataMember(Name = "ObjectType")]
public string ObjectType { get; set; }
[DataMember(Name = "LastModifiedDate")]
public DateTime LastModifiedDate { get; set; }
[DataMember(Name = "LastModifiedUser")]
public string LastModifiedUser { get; set; }
}
Сервисный контракт
[OperationContract]
[WebInvoke(Method = "PUT",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "AttributeDefinition/")]
void UpdateAttributes(AttributeContract attribute);
Метод Service
[OperationBehavior(TransactionScopeRequired = true)]
public void UpdateAttributes(AttributeContract attribute)
{
attribute.LastModifiedDate = DateTime.Now;
}
Да - метод был ошибкой, которая с тех пор была исправлена и с тем же результатом. Какие имена объектов должны быть одинаковыми. Имя объекта в JSON и Сервисный контракт, Сервисный метод ...? Я пробовал несколько различных соглашений об именах, поскольку это, по-видимому, самая очевидная проблема. – crowemi
Не важно, не используйте имя объекта или имя переменной метода. Только отправьте свойства: {AttributeId: 1, Attribute: "ss"} – mkysoft
Сначала сделайте свой сервисный тест с помощью инструментов, а не кода C#. Например, браузер Chrome имеет расширение, которое лучше всего подходит для Postman. – mkysoft