WCF REST 服务 returns 405 POST
WCF REST service returns 405 for POST
GET 有效,但是当调用 POST 时,我的服务以不允许的 405 方法响应。
[ServiceContract]
public interface IRestMeraki
{
[OperationContract]
[WebInvoke(Method = "OPTIONS", UriTemplate = "")]
void GetOptions();
[OperationContract]
[WebGet(
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "json/")]
void JSONData();
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "json/{value}")]
void Post(string value);
}
}
和我的方法(在 reading this 之后尝试获取选项)
public void GetOptions()
{
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
}
public void JSONData()
{
//my code here
}
public void Post(string value)
{
//my code here
}
我还在我的网络配置文件中添加了处理程序
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="POST, GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
我无法更改 Uri 以对每种方法使用不同的方法。我使用 get 进行验证,使用 post 接收数据。 Wireshark 显示此 405 错误。
您需要在 UriTemplate 中使用 *。当没有 *.
时,我能够看到问题
UriTemplate = "" //错误
UriTemplate = "*"/工作
从同一域调用时 POST 是否正常工作?
GET 有效,但是当调用 POST 时,我的服务以不允许的 405 方法响应。
[ServiceContract]
public interface IRestMeraki
{
[OperationContract]
[WebInvoke(Method = "OPTIONS", UriTemplate = "")]
void GetOptions();
[OperationContract]
[WebGet(
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "json/")]
void JSONData();
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "json/{value}")]
void Post(string value);
}
}
和我的方法(在 reading this 之后尝试获取选项)
public void GetOptions()
{
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
}
public void JSONData()
{
//my code here
}
public void Post(string value)
{
//my code here
}
我还在我的网络配置文件中添加了处理程序
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="POST, GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
我无法更改 Uri 以对每种方法使用不同的方法。我使用 get 进行验证,使用 post 接收数据。 Wireshark 显示此 405 错误。
您需要在 UriTemplate 中使用 *。当没有 *.
时,我能够看到问题UriTemplate = "" //错误
UriTemplate = "*"/工作
从同一域调用时 POST 是否正常工作?