У меня есть служба WCF REST, которая в основном отправляет и получает JSON.
В общем, я в порядке с использованием DataContractJsonSerializer
, но для некоторых объектов, которые передаются в качестве параметров в методы OperationContact, мне нужно использовать JSON.NET для десериализации.
Для этого стандартным подходом является Stream
в качестве входного параметра.
[OperationContract]
[WebInvoke(UriTemplate = "DoStuff", Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare)]
public void SetAppSettings(Stream input)
{
// parse input as JSON string, deserialize, process
}
Однако, когда я пытаюсь POST-контент с Content-Type: application/json
к этому методу, я получаю исключение, сообщающее, что ожидается необработанный контент.
С точки зрения клиента, я всегда отправляю application/json
контент. Я не хочу, чтобы клиент знал, что он должен установить Content-Type: text/plain
вместо application/json
(который используется в любом другом случае).
Есть ли способ заставить WCF игнорировать тип содержимого запроса для определенных OperationContracts (вместо переключения на необработанную модель для всей службы)?
В качестве альтернативы, есть ли способ, которым я мог бы опустить параметр Stream
и вместо этого получить необработанные байты тела запроса, скажем, из HttpContext.Current
, находясь внутри метода?