Asp.net Vnext api CORS( 跨域)

來源:互聯網
上載者:User

標籤:

概述

 

跨域資源共用(CORS )是一種網路瀏覽器的技術規範,它為Web伺服器定義了一種方式,允許網頁從不同的域訪問其資源。而這種訪問是被同源策略所禁止的。CORS系統定義了一種瀏覽器和伺服器互動的方式來確定是否允許跨域請求。 它是一個妥協,有更大的靈活性,但比起簡單地允許所有這些的要求來說更加安全。

CORS通過設定HTTP Header(標題)設定網站跨域存取。

 

Access-Control-Allow-Origin 允許跨域訪問的域,可以是一個域的列表,也可以是萬用字元"*"。
Access-Control-Allow-Credentials 預設情況下,跨源請求不提供憑據(cookie、HTTP認證及用戶端SSL證明等)。通過將withCredentials屬性設定為true,可以指定某個請求應該發送憑據。如果伺服器接收帶憑據的請求,會用下面的HTTP頭部來響應
Access-Control-Expose-Headers 需要向用戶端公開的標題。
Access-Control-Allow-Methods 允許使用的要求方法,以逗號隔開
Access-Control-Allow-Headers  允許自訂的頭部,以逗號隔開,大小寫不敏感

執行個體代碼

 

啟動類

     public void ConfigureServices(IServiceCollection services)            {            services.AddMvc();            services.ConfigureCors(options =>            {                options.AddPolicy(                    "AllowAnySimpleRequest",                    builder =>                    {                        //允許全部訪問域                        builder.AllowAnyOrigin()                            //允許全部要求方法  //允許全部標題  //允許全部憑據                            .AllowAnyMethod().AllowAnyHeader().AllowCredentials();                    });                options.AddPolicy(                    "AllowSpecificOrigin",                    builder =>                    {                        builder.AllowCredentials().WithOrigins("http://localhost:57096/")                        //只允許 post                          .WithMethods("POST")                          .AllowAnyHeader()                          //公開的標題                      . WithExposedHeaders("exposed11", "exposed22");                    });            });            }

控制器

  [Route("Cors/[action]")]    [EnableCors("AllowAnySimpleRequest")]    public class BlogController : Controller    {        [EnableCors("AllowSpecificOrigin")]        public IEnumerable<string> GetBlogComments(int id)        {            return new[] { "comment1", "comment2", "comment3" };        }

1.建立一個Mvc程式

2.控制器

 public class HomeController : Controller    {        // GET: Home        public ActionResult Index()        {            //加入Cookie            Response.Cookies.Add(new HttpCookie("111") { Value = "2222", Expires = DateTime.Now.AddDays(2) });            return View();        }    }

視圖

@{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport" content="width=device-width" />    <title>Index</title>    <script src="~/Scripts/jquery-1.10.2.js"></script>   <script type="text/javascript"></script></head><body>    <div>        <input type="button" id="cros" value="擷取跨域" />        <div id="msg"></div>    </div>    <script type="text/javascript">        $(function () {            $("#cros").click(function () {                $.ajax({                                      url: "http://localhost:49271/Cors/GetBlogComments",                    type: "POST",                    success: function (d) {                        $("#msg").html(d)                    }                })            });        });    </script></body></html>

 

已經加入要公開的標題了。

修改一視圖,支援跨域Cookie

@{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport" content="width=device-width" />    <title>Index</title>    <script src="~/Scripts/jquery-1.10.2.js"></script>   <script type="text/javascript">       window.onload = function ()       {           alert("11");           var xhr = new XMLHttpRequest();            xhr.open("get", "http://localhost:49271/Cors/GetBlogComments", true);            xhr.withCredentials = true; //支援跨域發送cookies            xhr.send();       }   </script></head><body>    <div>        <input type="button" id="cros" value="擷取跨域" />        <div id="msg"></div>    </div>    <script type="text/javascript">        $(function () {            $("#cros").click(function () {                $.ajax({                                      url: "http://localhost:49271/Cors/GetBlogComments",                    type: "POST",                    success: function (d) {                        $("#msg").html(d)                    }                })            });        });    </script></body></html>

 

已經獲得Cookie。

 

                                                      Asp.net Vnext & MVC6 系列教程                                                                 得到你的肯定是我最大的動力。

Asp.net Vnext api CORS( 跨域)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.