我已经使用以下 POST “操作”配置了 RESTful WCF:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Test", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json)]
void PostTest(Stream stream);
在我的 web.config 中,我配置了以下内容:
<service name="MyTest.TestSvc" behaviorConfiguration="MyTest.TestBehavior" >
<endpoint address="" behaviorConfiguration="MyBehavior" binding="webHttpBinding" contract="MyTest.ITestSvc"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
<endpointBehaviors>
<behavior name="MyBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyTest.TestBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
当我使用“text/plain”或“json”发送 POST 消息时,一切正常。但是,当我尝试使用 ContentType = "application/json"发送 POST 消息时, 它失败并显示以下消息: 远程服务器返回错误:(400)错误请求
我找到的唯一解决方案是定义工厂类:System.ServiceModel.Activation.WebServiceHostFactory int Svc 定义标记。
我在以下链接中找到了这个解决方案: Send JSON to WCF 3.5 using Ajax
据我了解,仅当您不想编辑 web.config 时,定义 WebServiceHostFactory 才有用。
如何在不定义 WebServiceHostFactory 的情况下使其工作?
请注意,我成功获得了“json”内容类型的 POST 消息,但没有获得“application/json”内容类型。