访问控制允许WCF服务的原始问题

时间:2017-01-27 05:58:48

标签: c# angularjs wcf

  • 我是WCF Restful Service的新用户并在UI中使用WCF项目服务并收到以下错误*

错误1: - 否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:2021'因此不允许访问。

错误2: - 预检的响应具有无效的HTTP状态代码405。

我已经谷歌知道这是Chrome的跨域问题。所以我在App.Config中添加了以下内容。

<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>

并使用以下代码更改了方法标题。

[OperationContract]
[WebInvoke(Method = "OPTION", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "AddAddressDirectory")]
Task<string> AddAddressDirectory(string aDVM);

此外,我正在使用SOAP服务

public string AddAddressDirectory(string model)
{
var aDVMObj = JsonConvert.DeserializeObject<AddressDirectoryViewModel>(model);
var result = _directoryServiceClient.AddAddressDirectory(aDVMObj);
var json = JsonConvert.SerializeObject(result);
return json;
}

我从angularJs调用方法。

var _apiPost = function (url, data, success, failure) {
var req = {
url: serviceUrl + url,
method: 'OPTIONS',
headers: {
'Content-Type': "application/json"
},
dataType: "json",
//crossDomain: true,
//processData: true,
data: JSON.stringify(data)
//data: $httpParamSerializer(JSON.stringify(data))
};
$http(req).then(success, function (response) { });
};

2 个答案:

答案 0 :(得分:0)

尝试添加标题 - 方法:

<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, OPTIONS" />

或安装this plugin

答案 1 :(得分:0)

将此添加到您的网络配置文件中:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Headers" value="X-Requested-With,Content-Type, Accept" />
  </customHeaders>
</httpProtocol>

你也可以这样定义你的方法:

[WebInvoke(Method = "*"
通过这种方式,您将涵盖所有类型的请求。