.NetCore在跨域時設定自定義響應頭的注意事項

没有星星的夏季發表於2024-04-09

  現在B/S開發基本都是前後端分離的方式了吧,那麼這往往會涉及到一個跨域的問題,為了安全,跨域訪問往往做了很多的限制,這裡對跨域時自定義響應頭做個筆記。

  當我們在.NetCore的後端給請求新增了一個自定義的響應頭的時候,透過api呼叫,響應頭完美的返回:  

    public class HomeController : ControllerBase
    {
        [HttpGet]
        public object Get()
        {
            Response.Headers["Access-Token"] = "XXXXXXXX";
            return "Hello";
        }
    }

  介面響應可以看到有響應頭:

  .NetCore在跨域時設定自定義響應頭的注意事項

  然後你興高采烈的提交介面,提交給前端,然後前端說拿不到響應頭,這就有點納悶了,明明返回了,為什麼會拿不到?

  其實,這也是跨域訪問的一個限制,這就要說說Access-Control-Expose-Headers 這個響應頭了,它的作用主要是在響應跨源請求中,允許伺服器指定哪些響應頭可以暴露給瀏覽器中執行的指令碼(js),往往它需要和Access-Control-Allow-OriginAccess-Control-Allow-Methods 等一起使用,畢竟要在跨域請求中啦。

  所以,我們只需要在跨域的管道配置中新增這個自定義的響應頭既可以:  

    //跨域
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(builder =>
        {
            builder.AllowAnyHeader()
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .WithExposedHeaders("Access-Token");
        });
    });

  這樣我們就可以前端指令碼上拿到這個響應頭了。

相關文章