WebApi和MVC在不同的项目中,共享cookie?

时间:2013-04-18 19:05:31

标签: asp.net-web-api cors

我已将WebApi项目分为MVC项目(http://mydomain.com)和WebApi项目(http://api.mydomain.com)。

我的MVC项目只管理身份验证和服务视图(使用knockoutJS和ajax)。

我的问题是,当从webapi域( 使用ajax )请求信息时,不会发送来自MVC项目的cookie。或者更确切地说,在测试期间,我在不同的部分使用两个IIS Express服务器。

该项目将在稍后部署到Azure,因此任何解决方案都必须在两个网站之间工作。

那么如何才能通过这些cookie发送?或者我应该切换到使用某种令牌吗?

修改

在我向contentType请求添加$.ajax之前,它一直有效。然后我得到了CORS预检选项。我用我认为正确的标题来回答它200。如果我删除该选项,我会再次收到包含所有cookie的工作请求。

作品

$.ajax({
    url: "http://localhost:54304/Organization/",
    type: "POST",
    data: "$top=10",
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    success: function (data) { console.log(data); }
});

不要工作:

$.ajax({
    url: "http://localhost:54304/Organization/",
    contentType: 'application/json', //<--- this triggers preflight
    type: "POST",
    data: "$top=10",
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    success: function (data) { console.log(data); }
});

现在是一个jquery&#34;功能&#34;或者它是如何工作的CORS?我应该设置什么标题?我试图回复:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:51343

1 个答案:

答案 0 :(得分:2)

设置Cookie时,您还可以设置Cookie应适用的域名 Cookie仅依赖于域名(以及可选的路径);不是你有什么样的服务器。

在您的情况下,您可以将域设置为.mydomain.com,这是一个通配符cookie,将发送到根域和所有子域。