所以我的WCF服务需要能够接收JSON POST请求,比如说:
{
"firstname": "Billy",
"lastname": "Jean"
}
带标题:
"Content-Type": "application/json"
为此,我想出了以下内容。
我的界面:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(UriTemplate = "/PostOmnis",
Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
System.Net.HttpStatusCode GetOmnisJson(Stream json);
}
我的课程:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class Service1 : IService1
{
public class MyMapper : WebContentTypeMapper
{
public override WebContentFormat GetMessageFormatForContentType(string contentType)
{
return WebContentFormat.Raw; // always
}
}
static Binding GetBinding()
{
CustomBinding result = new CustomBinding(new WebHttpBinding());
WebMessageEncodingBindingElement webMEBE = result.Elements.Find<WebMessageEncodingBindingElement>();
webMEBE.ContentTypeMapper = new MyMapper();
return result;
}
public System.Net.HttpStatusCode GetOmnisJson(Stream inputJsonStream)
{
StreamReader reader = new StreamReader(inputJsonStream);
string inputJson = reader.ReadToEnd();
// parse JSON string
.....
...
.
// return HTTP 200
return System.Net.HttpStatusCode.OK;
}
但是,通过Postman发送一些JSON,例如:
给我以下错误:
操作'GetOmnisJson'的传入消息(合约'IService1' 命名空间“http://tempuri.org/”包含无法识别的http 体格值'Json'。预期的正文格式值为“Raw”。 这可能是因为尚未配置WebContentTypeMapper 绑定。有关更多信息,请参阅WebContentTypeMapper的文档 的信息。
我在这里缺少什么?
答案 0 :(得分:0)
三个选项:
GetOmnisJson(Stream json)
更改为GetOmnisJson(YourPeopleClass person)
"Content-Type": "application/json"
(由于其他人正在使用该服务,并且您希望行为正常,因此并非总是这样)