zoukankan      html  css  js  c++  java
  • asp.net web api 跨域,带cookie

    官网上有一个介绍

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

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

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

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

    image

    在api的响应头上加入

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

    image

    则可以被跨域访问。

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

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

    image

    此时,请求头中会带cookie

    如果服务器不做任何设置

    image

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

    需要在响应头中加入

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

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

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

    image

    image

    我们自己写的指定的是*,而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}
    })
  • 相关阅读:
    objcopy使用
    linux中的strip命令简介
    strace命令详解
    bash执行顺序:alias --> function --> builtin --> program
    Ubuntu下安装docker
    uvm中类继承和phase
    error和exception有什么区别?
    sleep() 和 wait() 有什么区别?
    CSS3实现环形进度条?
    请写出你最常见到的5个runtime exception?
  • 原文地址:https://www.cnblogs.com/czcz1024/p/3673136.html
Copyright © 2011-2022 走看看