Dor*_*hen 2 c# wcf google-chrome cross-domain cors
我按照Ido Flatow的帖子创建了一个跨源请求并创建了以下内容:
在我的服务界面上:
[OperationContract]
[WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
bool GetUserAuthentication(string userLoginName, string password);
Run Code Online (Sandbox Code Playgroud)
在app.config上:
<behaviors>
<endpointBehaviors>
<behavior name="webSupport">
<webHttp />
<CorsSupport />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="CorsSupport" type="WebHttpCors.CorsSupportBehaviorElement, WebHttpCors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
Run Code Online (Sandbox Code Playgroud)
现在我发送一个简单的帖子请求使用angular $ http服务,它正在使用IE&Edge(也在Postman上),但无法在Chrome和Firefox上运行,但出现以下错误:
XMLHttpRequest无法加载 http:// localhost:5280/MetaDataService/GetUserAuthentication.预检的响应具有无效的HTTP状态代码400
Chrome错误打印屏幕:
Chrome正在预检查找CORS标头的请求.如果请求是可接受的,它将发送实际请求.
我的问题是发送到我的WCF服务器的OPTIONS请求被拒绝我Method="*"
为我的方法定义,导致选项请求被定向到我的方法,并期望获得参数.
基于如何使用WCF自托管问题处理Ajax JQUERY POST请求的解决方案是添加新的OperationContract来处理OPTIONS请求:
[OperationContract]
[WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
void GetOptions();
public void GetOptions()
{
}
Run Code Online (Sandbox Code Playgroud)
此方法获取所有选项请求,并允许将真正的POST方法定向到我的服务方法.
归档时间: |
|
查看次数: |
4185 次 |
最近记录: |