通过 Azure 服务总线调用 REST 服务:不允许使用 405 方法

Calling a REST service through Azure Service Bus: 405 method not allowed

我正在尝试创建 Windows Phone 连接到 REST 服务,方法是使用 Windows Azure 服务总线。

我开发了我的休息服务(这是一个Windows服务),现在我用fiddler来测试它。

但我不断收到错误消息“405 方法不允许”。

我注意到的事情:

这是我试图在 C# 中调用的操作

[WebInvoke(
//UriTemplate = "GetEmployees?Action=Get", // URI:"https://<MyBus>.servicebus.windows.net/GetEmployeesRest/GetEmployees?Action=Create"
UriTemplate = "GetEmployees?Action=Create", 
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]

public DEVEmployee[] GetEmployees()
{

}

我的url中配置的app.config是:

<baseAddresses>
<add baseAddress="https://<MyBus>.servicebus.windows.net/GetEmployeesRest/"/>
</baseAddresses>

我当时的称呼是:

https://.servicebus.windows.net/GetEmployeesRest/GetEmployees?Action=Create

有授权header。

有人知道我做错了什么吗?

提前致谢。

默认情况下 WebInvoke 使用 POST 请求(WebGet 使用 GET 请求)。如果您的客户端使用 POST 请求以外的任何方式调用示例中的 GetEmployees 方法,则服务将以 405.

响应

可以像这样覆盖默认的 HTTP 方法:

[OperationContract]
[WebInvoke(Method="PUT", UriTemplate = "?Action:Create",
  RequestFormat = WebMessageFormat.Json,
  ResponseFormat = WebMessageFormat.Json,
  BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void CreateEmployee(string id, string name);

如果您使用 Fiddler 进行测试,那么 Composer 允许您select提交请求时使用的方法。

如果您想从 Fiddler 进行测试而不需要包含授权 header,您可以将此配置用于您的服务:

<bindings>
  <webHttpRelayBinding>
    <binding name="default">
      <security relayClientAuthenticationType="None" />
    </binding>
  </webHttpRelayBinding>
</bindings>