为所有WCF REST OPTION调用发送自定义标头
问题描述:
我试图实现独立的WCF REST服务。我现在遇到的一个问题是我必须发送WebGet无法处理的自定义对象。所以我试图用POST而不是GET来发送它们。为所有WCF REST OPTION调用发送自定义标头
现在我当然不能用POST数据发出JSONP请求。要解决这个问题,我必须发送一个ALLOW-ORIGIN标头给所有使用“OPTIONS”HTTP方法进行的调用。是否有
- 一种将标题应用于每个OPTION调用的方法?
- 拦截并允许所有期权调用,无需设置
[WebRequest(method = "*")]
(而不是[WebRequest(method = "POST")]
- 一种添加页眉和没有它调用WCF方法返回请求的方法吗?
或者,如何我可以覆盖WebGet的参数,序列化方法?
我已经尝试过使用自定义端点和MessageDispatchers解决这个问题,但它似乎并没有工作。
答
我想通了^ 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数据的需要。