如何启用CORS(JS + MVC Web API)

时间:2014-09-28 11:52:05

标签: javascript c# asp.net-mvc cors

在我的客户端,我有这个代码:

<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可以帮助实现这一目标。

1 个答案:

答案 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;
    }