2016-09-19 78 views
0

所以即時嘗試這個HttpResponseMessage,它工作正常,只要我不放任何內容屬性。但是我現在需要它在郵件的內容中返回一個json。HttpResponseMessage在內容屬性填充時不起作用

我的代碼如下所示:

public HttpResponseMessage GetMemberById() 
{ 
    string id = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["id"]; 
    List<ClubMember> ls = KCBLL.Instance.FindMemberById(id); 
    HttpResponseMessage MessageRetour = new HttpResponseMessage(); 
    if (ls.Count == 1) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     string json = serializer.Serialize(ls.First()); 
     MessageRetour.Content = new StringContent(json, Encoding.UTF8); 
     MessageRetour.StatusCode = HttpStatusCode.OK; 
     return MessageRetour; 
    } 
} 

接口

[OperationContract] 
[WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = "GetMemberById")] 
HttpResponseMessage GetMemberById(); 

最後類

[DataContract] 
public class ClubMember 
{ 
    [DataMember] 
    public long MemberId { get; set; } 

    [DataMember] 
    public string MemberNumber { get; set; } 

    [DataMember] 
    public string FirstName { get; set; } 

    [DataMember] 
    public string LastName { get; set; } 
} 

任何幫助,將不勝感激

+0

也試着返回一個消息類型,我仍然得到一個「無法得到任何迴應」 – user3404416

回答

0

我花了一段但我想到了。

它沒有工作的原因是因爲HttpResponseMessage中的HttpContent是抽象的(它也解釋了爲什麼Message類不能很好地工作)。帶有DataContractAttribute的WCF自動轉換器不知道如何處理抽象類。 我發現這個問題的解決方法2。

1.使用從Newtonsoft JsonConvert保持消息類型作爲返回

  • 序列化對象(消息或HttpResponseMessage)
  • 使用UTF8Encoding.GetByte(yourjsonSerialized)
  • 新的MemoryStream與字節數組
  • CreateStreamResponse(MemoryStream的, 「應用程序/ JSON」)在WebOperationContext

2.自定義類包含您的對象通過使用自定義的接口(或抽象類),並通過使用KnowType屬性。或者使用Message和HttpResponseMessage的接口/抽象類。

乾淨的做法,但它是最長的。