方法在使用wcf webinvoke post时不允许出现错误

方法在使用wcf webinvoke post时不允许出现错误,wcf,Wcf,下面是操作契约,在这里我尝试插入一些数据,所以我使用WebInvoke POST方法,但是当我调用这个方法时,它给我一个错误,说“方法不允许” 我是否必须更改允许在web.config中进行POST调用的任何配置设置 [OperationContract] [WebInvoke( UriTemplate = "/Album/PostData?name={name}&CrBy={createdBy}" , Method="POST")] void PostUserData(st

下面是操作契约,在这里我尝试插入一些数据,所以我使用WebInvoke POST方法,但是当我调用这个方法时,它给我一个错误,说“方法不允许”

我是否必须更改允许在web.config中进行POST调用的任何配置设置

 [OperationContract]
 [WebInvoke(
 UriTemplate = "/Album/PostData?name={name}&CrBy={createdBy}" , 
 Method="POST")]
 void PostUserData(string name, string createdBy);
我打电话给我的服务,如下所示


如果你想这样呼叫你的服务,你应该使用
Method=“GET”
。此外,方法名和参数的定义似乎与查询字符串不匹配


如果要使用POST动词,则需要发送POST请求,并且无法通过在浏览器中直接键入url来调用服务。

将界面中的方法更改为

public class InputClass
{


public string Name{get;set;}
public string CreatedBy{get;set}
}

    [OperationContract]
     [WebInvoke(
     UriTemplate = "PostUserData" , 
     Method="POST",
    BodyStyle = WebMessageBodyStyle.WrappedRequest,
    ResponseFormat = WebMessageFormat.Json,
    RequestFormat = WebMessageFormat.Json))]
     void PostUserData(InputClass input);

有关更多信息,请参阅链接。

您是否通过浏览器中的javascript调用您的服务

html页面是否与wcf服务位于同一域中


如果它们不在同一个域中,那么我会说这是一个跨站点脚本问题。我相信GET是允许跨站点的,但POST是不允许的。如果服务器端(由WCF)支持,这将是一个解决方案。

您需要添加到web.config中

一,


二,



不!Get操作不应修改数据。它们应该是幂等的。@Ladislav Mrnka,没错,我没有注意到他正在试图修改数据。“而且你将无法通过在浏览器中直接键入url来调用服务”-这为我节省了很多时间!!!谢谢
<endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/>
<bindings>
      <customBinding>
        <binding name="basicConfig">
          <binaryMessageEncoding/>
          <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>
        </binding>
      </customBinding>
    </bindings>