在我的客户端,我有这个代码:
<script>
function SignIn() {
$.ajax({
type: 'GET',
url: 'http://localhost:54976/api/values?email=dieter&password=borgers',
contentType: 'text/plain',
beforeSend: function (xhr) {
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
},
//data: parameters,
crossDomain: true,
xhrFields: {
withCredentials: false
},
headers: {
'Access-Control-Allow-Origin': '*'
},
success: function (data) {
alert(data);
},
error: function () {
alert("fail");
}
});
}
</script>
然后在我的本地服务器&#39;我有这个:
public string Get(string Email, string Password)
{
Request.Headers.Add("Access-Control-Allow-Origin", "*");
return Email + " : " + Password;
}
这在我的web.config中:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
我做错了什么? 我总是犯这个错误:不允许从外部来源读取。启用CORS可以帮助实现这一目标。
答案 0 :(得分:0)
我之前遇到过这个问题,这就是我想出来的。
我创建了自定义操作属性
public class AllowCrossDomain : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
//Note "*" will allow all - you can change this to only allow tursted domains
}
}
现在将该属性添加到您的操作中 这会添加标头,因此客户端无需担心它。我在使用jsonp(允许使用cors)时遇到问题,因此需要将我的数据类型指定为json
[AllowCrossDomain]
public string Get(string Email, string Password)
{
Request.Headers.Add("Access-Control-Allow-Origin", "*");
return Email + " : " + Password;
}