通过 Azure 服务总线调用 REST 服务:不允许使用 405 方法
Calling a REST service through Azure Service Bus: 405 method not allowed
我正在尝试创建 Windows Phone 连接到 REST 服务,方法是使用 Windows Azure 服务总线。
我开发了我的休息服务(这是一个Windows服务),现在我用fiddler来测试它。
但我不断收到错误消息“405 方法不允许”。
我注意到的事情:
我的服务是在线的,因为当我关闭它时,fiddler returns我又报错了。
我的 Servicebus 已经启动 运行,正如我在 Azure 门户上看到的那样。
这是我试图在 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>
我正在尝试创建 Windows Phone 连接到 REST 服务,方法是使用 Windows Azure 服务总线。
我开发了我的休息服务(这是一个Windows服务),现在我用fiddler来测试它。
但我不断收到错误消息“405 方法不允许”。
我注意到的事情:
我的服务是在线的,因为当我关闭它时,fiddler returns我又报错了。
我的 Servicebus 已经启动 运行,正如我在 Azure 门户上看到的那样。
这是我试图在 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>