当前位置:   article > 正文

.NET Framework应用跨域问题解决方案_framework 跨域问题

framework 跨域问题

一、简介

CORS 全称 Cross-Origin Resource Sharing,是一种允许当前域(domain)的资源(比如 html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。
在这里插入图片描述

二、解决方案

解决方案有多种,可以直接给 HttpResponseMessage 添加一个 Access-Control-Allow-Origin header、在 Webconfig 文件中配置、使用 MVC Filter 进行添加 Access-Control-Allow-Origin header 等

注意:如果是 IOS 12 中的 Safari 浏览器,配置为 * 是没有作用的,需要配置为固定的域名 htts://www.xxxxx.com

2.1 HttpResponseMessage

可以在 Action 中可以直接给 HttpResponseMessage 添加一个 Access-Control-Allow-Origin header。代码如下

public HttpResponseMessage GetBookInfo(int id)
{
  BookDto book = db.Books.Include(b=>b.Author).Where(b=>b.BookId==id).Select(AsBookDto).SingleOrDefault();
  if (book == null)
  {
  	return Request.CreateErrorResponse(HttpStatusCode.NotFound, "未找到实例");
  }
  var response = Request.CreateResponse(book);
  //有Access-Control-Allow-Origin响应头,浏览器才会把响应给客户端,* 表示允许任何来源的请求
  response.Headers.Add("Access-Control-Allow-Origin", "*");
  return response;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.2 Web.config

如果你的平台是 .Net Framework,可以在在 Webconfig文件中配置以下节点,使用配置文件时要先移除后添加,确保起作用。如下

<system.webServer>
  <httpProtocol>
  <!--跨域设置-->
    <customHeaders>
    <remove name="Access-Control-Allow-Origin" />
    <remove name="Access-Control-Allow-Headers" />
    <remove name="Access-Control-Allow-Methods" />
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="*" />
    <add name="Access-Control-Allow-Methods" value="*" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.3 MVC Filter

添加一个名为 CorsFilter 的过滤器,期主要作用是给 Response 添加 Access-Control-Allow-Origin header,这个过滤器的注册可以使用全局,也可以在 Controller、Action 上。核心代码如下

/// <summary>
/// 跨域
/// </summary>
public class CorsFilter:ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
    	base.OnActionExecuted(actionExecutedContext);
    	actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/561883
推荐阅读
相关标签
  

闽ICP备14008679号