gpt4 book ai didi

asp.net-mvc - ASP .NET MVC5 中的 CORS

转载 作者:行者123 更新时间:2023-12-03 06:10:38 26 4
gpt4 key购买 nike

我有一个 MVC 项目,其中有几个想要公开跨域的 JSON Controller 方法。不是整个网站,只是这两种方法。

我基本上想要这篇文章中针对 cors 所说的确切内容:

http://enable-cors.org/server_aspnet.html

但是,问题是我有一个常规的 MVC 项目,而不是 WEB API,这意味着我无法按照有关注册的步骤进行操作

public static void Register(HttpConfiguration config)
{
// New code
config.EnableCors();
}

方法,因为它不存在于我的 MVC 项目中。

虽然它是一个 MVC 项目,但有办法使用这个库吗?

我知道我可以使用以下方法通过 web.config 进行配置:

<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="http://www.domain.com" />
</customHeaders>
</httpProtocol>

但我不想公开所有方法,并且我想指定多个域(2 个域)来访问我的方法...

最佳答案

如此处所述:Setting Access-Control-Allow-Origin in ASP.Net MVC - simplest possible method

您应该只创建一个操作过滤器并在那里设置标题。您可以在任何需要的操作方法上使用此操作过滤器。

public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}

如果您想添加多个域,则不能只多次设置 header 。在您的操作过滤器中,您需要检查请求域是否来自您的域列表,然后设置 header 。

    public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var domains = new List<string> {"domain2.com", "domain1.com"};

if (domains.Contains(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Host))
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
}

base.OnActionExecuting(filterContext);
}

关于asp.net-mvc - ASP .NET MVC5 中的 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27218240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com