C# RESTful.NET服务和飞行前

C# RESTful.NET服务和飞行前,c#,wcf,rest,xmlhttprequest,C#,Wcf,Rest,Xmlhttprequest,我正在用WCF和C#开发一个RESTful web服务。该服务工作正常,但当我使用XMLHttpRequest从静态HTML页面发出请求时,除IE(还有谁?)之外的所有浏览器都会首先发送一条prefligth消息(),请求该服务的可用选项。只有当我更改消息的标题以发送POST请求时,才会出现此类消息 我的问题/建议:你知道有什么方法可以支持WCF/.NET上的此类消息吗?我的想法是实现一种处理飞行前消息的方法;回复将是一个带有所有可用选项(GET、PUT、POST、DELETE)的标准回复消息,

我正在用WCF和C#开发一个RESTful web服务。该服务工作正常,但当我使用
XMLHttpRequest
从静态HTML页面发出请求时,除IE(还有谁?)之外的所有浏览器都会首先发送一条prefligth消息(),请求该服务的可用选项。只有当我更改消息的标题以发送POST请求时,才会出现此类消息

我的问题/建议:你知道有什么方法可以支持WCF/.NET上的此类消息吗?我的想法是实现一种处理飞行前消息的方法;回复将是一个带有所有可用选项(GET、PUT、POST、DELETE)的标准回复消息,因为所有这些操作都是可用的,并且还表明消息上的数据的唯一可用数据类型是JSON。回复后,浏览器会发送正常请求,因此一切正常


您认为呢?

您可以像使用WebInvoke属性支持POST一样支持选项。只要改变方法。选项请求没有什么特别之处。您只需在响应中设置允许标头。

问题已解决!我已经用
*
设置了
方法
属性,现在它工作正常:首先回答飞行前请求,然后接收并处理真正的请求。代码如下:

[OperationContract]
[WebInvoke(UriTemplate="*", Method = "*")]
void HandleHttpOptionsRequest();
[运营合同]
[WebInvoke(UriTemplate=“*”,Method=“*”)]
void HandleHttpOptionsRequest();

这是一个很好的解决方案,您可以实现一个
IDispatchMessageInspector
来轻松添加必要的CORS头。

为什么不简单地附加一个LS(分层系统)解决方案并使用反向代理?编写一个用于IE的例程听起来很麻烦。在这种情况下,IE没有问题,其他所有问题都是:IE不发送飞行前消息,因此服务工作正常。所有其他浏览器都发送飞行前消息,必须对其进行处理,因此需要例程来处理它。也许IE会在9版本上实现这个功能,所以编写这个例程并不困难,因为它在将来是需要的。嗨,Darrel!谢谢你的回答,很抱歉耽搁了。在下面寻找答案。我试着把选项放在方法属性上,但没用。。。我用*解决了它。您是否曾经使用attribtue方法上的选项进行过此操作?提前谢谢@jmpcm不,我从未使用过选项,但我在WebInvoke中使用了补丁方法。不确定为什么选项方法不适用于您。欢迎使用堆栈溢出!这可能是对您从中获得代码的答案的注释,而不是答案本身。再重复一点,我们需要在哪里添加这个?