Asp.Net Core WebAPI 跨域處理

一、Core WebAPI中的跨域處理

  1. 在使用WebAPI項(xiàng)目的時(shí)候基本上都會(huì)用到跨域處理
  2. Core WebAPI的項(xiàng)目中自帶了跨域Cors的處理,不需要單獨(dú)添加程序包


    自帶了跨域Cors的處理

使用實(shí)例

  1. 全局配置中啟用跨域處理,命名為‘a(chǎn)ny’,任何都可以訪問
    在Startup.cs中添加配置
public void ConfigureServices(IServiceCollection services)
{
    //配置跨域處理
    services.AddCors(options =>
    {
        options.AddPolicy("any", builder =>
        {
            builder.AllowAnyOrigin() //允許任何來源的主機(jī)訪問
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials();//指定處理cookie
        });
    });
}
  1. 在控制器或Action的方法注釋上使用對(duì)應(yīng)名稱的 跨域規(guī)則[EnableCors("any")]
 [Route("api/[controller]")]
    [ApiController]
    [EnableCors("any")] //設(shè)置跨域處理的 代理
    public class UserController : ControllerBase
    {
         // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<User>> Get()
        {
            Conn mysqlGet = new Conn();
            return mysqlGet.UserList();
        }
    }

注:如果在控制器上指定,則控制器內(nèi) 所有的Action都有對(duì)應(yīng)的跨域限制。

三 、跨域時(shí),Cookie的訪問

  1. 后臺(tái)通過HttpContext上下文可以直接操作Cookie
[Produces("application/json")]
[Route("api/CookieOne")]
[EnableCors("any")]
public class CookieOneController : Controller
{
    //后臺(tái)設(shè)置Cookie 
    [HttpPut]
    public IActionResult Add()
    {
        ControllerContext.HttpContext.Response.Cookies.Append("name", "中文 ,張三豐");
        return Ok(new { msg = "設(shè)置成功" });
    }

    //后臺(tái)獲取Cookie,特別 說明對(duì)于基礎(chǔ)類型的返回值,默認(rèn)JQuery的ajax解析失敗,最好返回IActionResult 
    [HttpGet]
    public IActionResult Get()
    {
        string result = HttpContext.Request.Cookies["url"];
        return Content(result);
    }
}
  1. 前臺(tái)JQuery的ajax請(qǐng)求,需要攜帶withCredentials才會(huì)將cookie的值保存到客戶端
var example1 = new Vue({
    el: '#example1',
    data: {
        name: '空',
        url: '空'
    }
});
//1.后臺(tái)添加cookie
function addOne() {
    $.ajax({
        url: urlHelper.getApi('cookieone'),
        type: 'put',
        xhrFields: {
            withCredentials:true //配置http跨域請(qǐng)求中攜帶cookie
        },
        success: function (data) {
            console.info(data);
            //前臺(tái)獲取cookie
            var name = Cookies.get('name');
            console.info(name);
            example1.name = name; //Vue中修改雙向綁定可以通過Vue實(shí)例進(jìn)行,不需要再次通知頁面(和AngularJs不同)
        }
    });
}
addOne();
//2.前臺(tái)添加Cookie 后臺(tái)獲取
function getOne()
{
    Cookies.set('url', 'http://www.gongjuji.net/');


    $.ajax({
        url: urlHelper.getApi('cookieone'),
        type: 'get',
        contentType: 'application/json',
        xhrFields: {
            withCredentials: true //配置http跨域請(qǐng)求中攜帶cookie
        },
        success: function (data) {
            console.info(data);
            example1.url = data;
        }
    });
}
getOne();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,939評(píng)論 1 92
  • 本文翻譯自Enabling Cross-Origin Requests in ASP.NET Web API 2 ...
    凌雲(yún)木閱讀 10,333評(píng)論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript實(shí)...
    他方l閱讀 1,135評(píng)論 0 2
  • 什么是跨域 只要是協(xié)議、域名、端口有任意一個(gè)不同的url都是不同的域。協(xié)議指的是http或者h(yuǎn)ttps協(xié)議。域名就...
    dogLin閱讀 14,020評(píng)論 0 8

友情鏈接更多精彩內(nèi)容