如何在 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 startng 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 Core中实现一个基础的身份认证

如何在 ASP.NET Core 中实现自定义模型验证?

如何在 asp.net 中实现“Access-Control-Allow-Origin”标头

如何在 Razor 页面 ASP.NET 中实现图像的动态 url

如何在 ASP.NET MVC 5 中实现自定义身份验证

如何在 ASP.Net MVC 中实现视频文件流式传输?