我已将 WebApi 项目分为 MVC 项目 ( http://mydomain.com ) 和 WebApi 项目 ( http://api.mydomain.com )。
我的 MVC 项目仅管理身份验证并为 View 提供服务(使用 knockoutJS 和 ajax)。
我的问题是,当从 webapi 域请求信息时(使用 ajax),不会发送来自 MVC 项目的 cookie。或者更确切地说,在测试期间我在不同部分使用两个 IIS Express 服务器。
该项目稍后将部署到 Azure,因此任何解决方案都必须在两个网站之间运行。
那么我怎样才能让这些cookies被发送呢?或者我应该改用某种 token ?
编辑
它一直有效,直到我将 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 的“功能”还是 CORS 的工作原理?我应该设置哪些标题?我尝试回复:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:51343
最佳答案
当您设置 cookie 时,您还设置了 cookie 应应用于哪些域名。
Cookie 仅依赖于域名(以及可选的路径);不在您拥有的服务器类型上。
就您而言,您可以将域设置为 .mydomain.com
,这是一个通配符 Cookie,将发送到根域和所有子域。
关于asp.net-web-api - WebApi和MVC在不同的项目中,共享cookies吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16091147/