如何在 asp.net 中实现“Access-Control-Allow-Origin”标头
Posted
技术标签:
【中文标题】如何在 asp.net 中实现“Access-Control-Allow-Origin”标头【英文标题】:How to implement "Access-Control-Allow-Origin" header in asp.net 【发布时间】:2011-09-24 21:17:02 【问题描述】:是否可以在asp.net中实现“Access-Control-Allow-Origin”标头
【问题讨论】:
【参考方案1】:在服务器上配置 CORS 响应标头并不是一个真正的选择。您应该在客户端配置代理。
Angular 示例 - 因此,我创建了一个 proxy.conf.json 文件来充当代理服务器。下面是我的 proxy.conf.json 文件:
"/api":
"target": "http://localhost:49389",
"secure": true,
"pathRewrite":
"^/api": "/api"
,
"changeOrigin": true
将文件放在 package.json 的同一目录中,然后我修改了 package.json 文件中的启动命令,如下所示
"start": "ng serve --proxy-config proxy.conf.json"
现在,来自app组件的http调用如下:
return this.http.get('/api/customers').map((res: Response) => res.json());
最后运行使用 npm start 或 ng serve --proxy-config proxy.conf.json
【讨论】:
【参考方案2】:1.Install-Package Microsoft.AspNet.WebApi.Cors
2 。在 WebApiConfig.cs 中添加此代码。
public static void Register(HttpConfiguration config)
// Web API configuration and services
// Web API routes
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
3。添加这个
using System.Web.Http.Cors;
4。将此代码添加到 Api Controller (HomeController.cs)
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class HomeController : ApiController
[HttpGet]
[Route("api/Home/test")]
public string test()
return "";
【讨论】:
此代码允许 CORS 用于特定的操作方法,而不是 js 文件【参考方案3】:另一种选择是直接将其添加到 web.config 中:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://www.yourSite.com" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
... 我在here找到了这个
【讨论】:
是否有理由将值设置为 URL 而不是 * 不适用于 json 调用?【参考方案4】:您需要一个 HTTP 模块来查看请求的资源,如果它是 css 或 js,它会使用请求者 URL 附加 Access-Control-Allow-Origin 标头,除非您希望它使用 ' 完全打开*'。
【讨论】:
【参考方案5】:来自enable-cors.org:
ASP.NET 上的 CORS
如果您无权配置 IIS,您仍然可以通过 ASP.NET 添加标头,方法是将以下行添加到您的源页面:
Response.AppendHeader("Access-Control-Allow-Origin", "*");
另见:配置IIS6 / IIS7
【讨论】:
+1 谢谢,但我只需要为资源文件添加此标头,例如css & js 文件 我有一些经常更新的 js 文件,我想在其他域上使用它们,但它们不会工作,因为跨域策略 无论如何我都会把它添加到整个网站 如何添加到资源文件中? 对我来说,在当前版本的 c# 中,接受的语法是 Response.Headers.Add("Access-Control-Allow-Origin", "*");以上是关于如何在 asp.net 中实现“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asp.net 中实现“Access-Control-Allow-Origin”标头