我应该在哪里看:WCF休息- POST端点未找到

本文关键字:端点 POST 休息 在哪里 WCF 我应该 | 更新日期: 2023-09-27 17:53:35

我已经研究了将近两天,这表明这将是一个非常简单的修复:

我有一个WCF REST服务。GET非常适合返回JSON,但是在POST中,我只接收Chrome中找不到的端点,以及提琴手。

我将提供GET和POST属性,以防我做了一些突破GET方法的事情。

<services>
      <service name="WCFServiceWebRole1.Class" behaviorConfiguration="serviceBehavior">
        <endpoint address=""
                  binding="webHttpBinding"
                  contract="WCFServiceWebRole1.IClass"
                  behaviorConfiguration="web">
        </endpoint>
      </service>
      <service name="WCFServiceWebRole1.ClassPost" behaviorConfiguration="serviceBehavior">
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="WCFServiceWebRole1.IClassPost"
                  behaviorConfiguration="web">
        </endpoint>
      </service>
    </services>

有一件事引起了我的注意,那就是它没有为GET设置。通过更改它,我打破了解决方案的GET,但是通过从POST中删除它并没有改变情况。

我的服务契约是这样的:

[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
string Decode(string jsonString);

// TODO: Add your service operations here
}

[ServiceContract]
public interface IClassPost
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/POST/?json={jsonString}", Method = "POST")] 
string DecodePost(string jsonString);
}

最后,我在同一个文件中有两个相同的类:

public class ClassPost : IClassPost
    {
        public string DecodePost(string queryString)
        {
            string Deserialized = JsonCleaner.CleanAllWhiteSpace(JsonConvert.DeserializeObject(queryString).ToString());
            return Deserialized;
        }

解码在GET上的类是相同的,相同的方法和类。

我怎样才能得到更多的信息,为什么这是失败的,或者我做错了什么?(到目前为止,Stack Overflow或其他问题似乎都没有相同的问题/解决方案)。

我应该在哪里看:WCF休息- POST端点未找到

原来是我的服务合同出了问题。

修改为单独的ServiceContracts.

将所有的operationcontract移到一个服务契约中纠正了这个问题,所以它看起来是这样的:

[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
    string Decode(string jsonString);

[WebInvoke(ResponseFormat = WebMessageFormat.Json, 
   BodyStyle = WebMessageBodyStyle.Bare,
   UriTemplate = "/POST/?json={jsonString}", Method = "POST")] 
   string DecodePost(string jsonString);
}