asp.net web api 跨域,带cookie

时间:2024-01-13 19:21:50

官网上有一个介绍

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

但是只支持4.5,如果是4.0开发,需要自己手动了。

默认是不支持跨域的,如果你从一个域访问另一个域的api

虽然是200,但是什么东西都没有返回

asp.net web api 跨域,带cookie

在api的响应头上加入

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

asp.net web api 跨域,带cookie

则可以被跨域访问。

如果希望带cookie信息,则ajax请求时,需要

$.ajax({
type: "get",
url: "http://localhost:6836/api/values",
xhrFields: { withCredentials: true }
})

asp.net web api 跨域,带cookie

此时,请求头中会带cookie

如果服务器不做任何设置

asp.net web api 跨域,带cookie

又会出现200,但是没有收到值的情况

需要在响应头中加入

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");

但是还是会发生200,没有返回值

通过对比ms提供的和自己写的发现

asp.net web api 跨域,带cookie

asp.net web api 跨域,带cookie

我们自己写的指定的是*,而ms是具体的地址。把*改成具体的地址,则ok

地址可以通过

Request.Headers.GetValues("Origin")

获取请求头中的信息

以上方式,只适合夸子域的请求,如果是根域都跨了,他是不会在头中添加cookie的。

这个时候,我们可以使用一个自定义头来发送一些内容。

在发送带有自定义头的请求时,会先以一个Options method发起请求,查看是否允许子定义的头

这个时候,服务端首先要允许options method,然后

Headers.Add("Access-Control-Allow-Headers","*");

同样注意把*替换成你的自定义头

可以添加Access-Control-Allow-Methods头来设置允许的method
 
最后再jquery中
$.ajax({
headers:{name:value}
})