在 ASP.NET Web 窗体中的特定 URL 上启用 CORS

Posted

技术标签:

【中文标题】在 ASP.NET Web 窗体中的特定 URL 上启用 CORS【英文标题】:Enable CORS on Specific URL in ASP.NET Web Forms 【发布时间】:2018-04-02 01:35:25 【问题描述】:

我不是后端开发人员,所以如果我没有提供足够的信息,我会提前道歉。我只是想找一些资源来帮助我的后端开发人员了解我想要做什么。

我正在尝试向使用 ASP.NET Web 窗体构建的 Web 应用程序内部的 rss 提要发出 AJAX GET 请求。但是,由于跨域安全性,请求被阻止。我想为与我们的 RSS 提要 (/page/rss/id) 关联的路由启用 CORS。

我能够在我们的 webconfig 中启用 CORS:

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" values="*" />
        <add name="Access-Control-Allow-Methods" values="GET" />
        <add name="Access-Control-Allow-Headers" values="Content-Type" />
   </customHeaders>
</httpProtocol>

但是,这为整个项目启用了它,这不是我想要的。我们的路由在 XML 文件中定义,如下所示:

<namespace.routing>
  <routings>
    <route name="publishedPage" url="page/PageName" page="~/Default.aspx" />
  </routings>
  <defaults>
    <default url="http://blog.example.com" domain="example.com" page="page/homepage" />
  </defaults>
</namespace.routing>

那么,如何在 ASP.NET Web 窗体的特定路径上启用 CORS?如果有人可以向我指出一些可以帮助我们的资源的方向,那就太好了。如果您需要更多信息,我很乐意提供。谢谢!

【问题讨论】:

【参考方案1】:

我不确定您是如何返回 rss 端点的,但如果您有权访问 HttpContext 对象,则可以使用它直接提供 CORS 标头。

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", "Get");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers", "Content-Type");

根据您的应用程序的年龄,您可能需要使用AddHeader 而不是AppendHeader

【讨论】:

它不起作用,因为 OPTIONS 请求没有调用 ASHX 和 ASPX 处理程序并在应用程序级别(web.config 或 global.asax)处理

以上是关于在 ASP.NET Web 窗体中的特定 URL 上启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web 窗体中的 jQuery 验证插件

ASP.NET Web 窗体中的输出编码安全问题

使用长时间运行的方法阻止 ASP.NET Web 窗体中的网页

如何针对跨站点脚本清理查询字符串输入 - 反映 ASP .Net(Web 窗体)应用程序中的问题?

asp.net web应用程序和asp.net web窗体应用程序的区别?

在ASP.NET WEB中建的窗体,怎么调用在控制台应用程序中建的类?