RESTful.NET服务和预检

时间:2010-11-11 10:13:11

标签: c# wcf rest xmlhttprequest

我正在使用WCF和C#开发RESTful Web服务。该服务工作正常,但是当我使用XMLHttpRequest从静态HTML页面发出请求时,除IE以外的所有浏览器(还有谁?)首先发送预先发送消息(https://developer.mozilla.org/en/http_access_control)请求可用选项服务。仅当我更改消息的标头以发送POST请求时才会出现此类消息。

我的问题/建议:你知道如何在WCF / .NET上支持这类消息吗?我的想法是实现一个处理预检信息的方法;回复将是一个带有所有可用选项(GET,PUT,POST,DELETE)的标准回复消息,因为所有这些操作都可用,并且还告诉消息数据的唯一可用数据类型是JSON。在回复之后,浏览器将发送正常请求,因此一切都应该正常。

您怎么看?

3 个答案:

答案 0 :(得分:1)

您可以像支持使用WebInvoke属性的POST一样支持OPTIONS。只需更改方法即可。 OPTIONS请求没有什么特别之处。您只需在响应中设置Allow标头。

答案 1 :(得分:1)

问题解决了!我已将Method属性设置为*,现在它可以正常工作:首先回答预检请求,然后接收并处理实际请求。代码如下:

[OperationContract]
[WebInvoke(UriTemplate="*", Method = "*")]
void HandleHttpOptionsRequest();

答案 2 :(得分:0)

[OperationContract]
[WebInvoke(UriTemplate="*", Method = "*")]
void HandleHttpOptionsRequest();

这是一个很好的解决方案,你可以很容易地实现IDispatchMessageInspector来添加必要的CORS头文件。