2011-04-12 146 views
3

我試圖實現獨立的WCF REST服務。我現在遇到的一個問題是我必須發送WebGet無法處理的自定義對象。所以我試圖用POST而不是GET來發送它們。爲所有WCF REST OPTION調用發送自定義標頭

現在我當然不能用POST數據發出JSONP請求。要解決這個問題,我必須發送一個ALLOW-ORIGIN標頭給所有使用「OPTIONS」HTTP方法進行的調用。是否有

  • 一種將標題應用於每個OPTION調用的方法?
  • 攔截並允許所有期權調用,無需設置[WebRequest(method = "*")](而不是[WebRequest(method = "POST")]
  • 一種添加頁眉和沒有它調用WCF方法返回請求的方法嗎?

或者,如何我可以覆蓋WebGet的參數,序列化方法?

我已經嘗試過使用自定義端點和MessageDispatchers解決這個問題,但它似乎並沒有工作。

回答

1

我想通了^ h ow覆蓋WebGet的參數序列化。 This question指出我正確的方向。

我只需要覆蓋HttpBehavior並添加我自己的QueryStringConverter,它使用Newtonsoft JSON序列化程序。


    public class CustomQueryStringConverter :System.ServiceModel.Dispatcher.QueryStringConverter 
     { 
      public override bool CanConvert(Type type) 
      { 
       return true; 
      } 

      public override object ConvertStringToValue(string parameter, Type parameterType) 
      { 
       if (base.CanConvert(parameterType)) 
       { 
        return base.ConvertStringToValue(parameter, parameterType); 
       } 
       else 
       { 
        object param = Newtonsoft.Json.JsonConvert.DeserializeObject(parameter, parameterType); 
        return param; 
       } 
      } 

      public override string ConvertValueToString(object parameter, Type parameterType) 
      { 
       if (base.CanConvert(parameterType)) 
       { 
        return base.ConvertValueToString(parameter, parameterType); 
       } 
       else 
       { 
        return Newtonsoft.Json.JsonConvert.SerializeObject(parameter); 
       } 
      } 
     } 

這也消除了發送OPTIONs頭和POST數據的需要。