何らかの理由で、私のAttributeContractオブジェクトがクライアントからサービスメソッドに正しく渡されていません。呼び出しによってメソッドに正常にアクセスできますが、オブジェクトは空です。私がここで間違っていることに関する提案はありますか?WCF REST投稿複合オブジェクト
クライアント
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);
サービスメソッド
[OperationBehavior(TransactionScopeRequired = true)]
public void UpdateAttributes(AttributeContract attribute)
{
attribute.LastModifiedDate = DateTime.Now;
}
はい - 方法は間違いであったため、修正されて同じ結果が得られました。 同一である必要があるオブジェクト名はどれですか。 JSON内のオブジェクト名とサービス契約、サービスメソッド...? これは最も明白な問題であると思われるいくつかの異なる命名規則を試しました。 – crowemi
オブジェクト名やメソッド変数名は使用しないでください。プロパティのみを送信する:{AttributeId:1、Attribute: "ss"} – mkysoft
まず、C#コードではなくツールを使用してサービステストを行います。たとえば、クロムブラウザには、名前が郵便番号の拡張子があります。 – mkysoft