我创建了WCF POST方法。当我通过在查询字符串中传递参数从浏览器调用它时,它给出了像
这样的错误不允许使用方法。请参阅服务帮助页面以构建对服务的有效请求
我的代码在界面
[ServiceContract]
public interface IService
{
//[OperationContract]
//[WebGet(UriTemplate = "/UpdateDeviceStatus?FaultStatus={FaultStatus}&MacAddress={MacAddress}", RequestFormat = WebMessageFormat.Xml)]
//string UpdateDeviceStatus(string FaultStatus, string MacAddress);
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json,
UriTemplate = "/UpdateDeviceStatus?FaultStatus={FaultStatus}&MacAddress={MacAddress}")]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
string UpdateDeviceStatus(string FaultStatus, string MacAddress);
}
在Service.svc中
public string UpdateDeviceStatus(string FaultStatus, string MacAddress)
{
try
{
// here my operation
}
catch (Exception ex)
{
return "Failed to update";
}
}
我从浏览器调用的URL是
http://localhost:2121/WcfService/Service.svc/UpdateDeviceStatus?FaultStatus={1}&MacAddress={20:10:00:20:10:00}
注意:如果我使用webGet方法然后它可以工作但是对于POST方法它不起作用可以任何人请给我解决方案吗?
答案 0 :(得分:0)
通过在浏览器中输入地址来访问资源时,请求通过GET完成。
这就是您的服务抱怨的原因:请求是通过GET完成的,这是不允许的,因为您定义为仅允许POST请求([WebInvoke(Method = "POST",
)。
为了能够执行除GET之外的其他请求,我建议您使用Postman之类的工具,它允许您撰写任何类型的http请求。
您通过错误消息获得的提示也非常有价值:请查看您的服务帮助页面。这里显示了所需的格式和生成的输出。要启用服务帮助页面,请查看this article。
答案 1 :(得分:0)
尝试 -
public class CompositeType
{
public string FaultStatus { get; set; }
public string MacAddress { get; set; }
}
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "post")]
CompositeType GetDataUsingDataContract(CompositeType composite);
使用Fiddler
或类似工具检查它是否有效。
此外,您可以修改config
以启用服务帮助 -
<endpointBehaviors>
<behavior name="e">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
通过导航到 yoururl / service.svc / help
,这可以帮助您完成允许的操作,可能的请求和响应正文格式等答案 2 :(得分:0)
使用浏览器的调试工具(开发者选项)(对于Firefox,它是F12 Key)。 在网络选项卡中,您会发现浏览器在服务器期待POST时向服务器发送get请求。 因此错误。