asp.net Webforms 端点上的CORS端点

我正在尝试将一些[WebMethod]注释的端点函数添加到Webforms样式的Web应用程序(.aspx和.asmx)。

我想用[EnableCors]注释这些端点,从而获得所有良好的ajax-preflightfunction。

VS2013接受注释,但端点仍然不能与CORS一起使用。 (它们在使用同源而非交叉原点时工作正常)。

我甚至不能让它们与下来和脏的交叉起源

 HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*"); 

方法 – 我的浏览器拒绝响应,并且不显示跨源响应标头。

如何在这些[WebMethod]端点中获取CORSfunction?

我建议仔细检查您是否已执行此页面上的所有步骤: ASP.NET上的CORS

此外:

 Response.AppendHeader("Access-Control-Allow-Origin", "*"); 

还试试:

 Response.AppendHeader("Access-Control-Allow-Methods","*"); 

尝试直接在web配置中添加:

         

如果做不到这一点,您需要确保您可以控制这两个域。

如果您需要预检请求,例如,您可以发送经过身份validation的请求,则无法设置Access-Control-Allow-Origin: * 。 它必须是特定的Origin域。
如果您使用除默认值之外的任何内容,则还必须设置Access-Control-Allow-MethodsAccess-Control-Allow-Headers响应标头。
(注意这些约束只是CORS本身的工作原理 – 这是它的定义方式。)

因此,仅仅依靠[EnableCors]属性是不够的,您必须为参数设置值:

 [EnableCors(origins: "https://www.olliejones.com", headers: "X-Custom-Header", methods: "PUT", SupportsCredentials = true)] 

或者,如果您想手动和明确地执行操作:

 HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "https://www.olliejones.com"); HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers", "X-Custom-Header"); HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", "PUT"); HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true"); 

最后一件事 – 你必须在启动时调用.EnableCors() 。 在例如MVC或WebAPI中,你可以在注册配置等时在HttpConfiguration上调用它 – 但是我不知道它如何与WebForms一起工作。

如果使用AppendHeader方法发送特定于缓存的标头,并同时使用缓存对象模型(缓存)来设置缓存策略,则在使用缓存对象模型时,可能会删除与缓存相关的HTTP响应标头。 此行为使ASP.NET能够维护最严格的设置。 例如,考虑包含用户控件的页面。 如果这些控件具有冲突的缓存策略,则将使用限制性最强的缓存策略。 如果一个用户控件设置标题“Cache-Control:Public”,而另一个用户控件通过调用SetCacheability设置限制性更强的标题“Cache-Control:Private”,那么“Cache-Control:Private”标题将随之发送响应。

您可以在web配置中为customHeaders创建httpProtocol。

      

你可以在MVC中这样做

 [EnableCors(origins: "*", headers: "*", methods: "*")] public ActionResult test() { Response.AppendHeader("Access-Control-Allow-Origin", "*"); return View(); } 

对于Web表单,您可以使用

Response.AddHeader(“Access-Control-Allow-Origin”,“*”);

代替

Response.AppendHeader(“Access-Control-Allow-Origin”,“*”);

第一个适用于旧版ASP.Net Web Form。

我认为您的代码看起来不错,但IIS不会单独发送标头实体并且预期会有响应。 请检查IIS是否配置正确。

  • 配置IIS6
  • 配置IIS7

如果CORS不能解决你的特殊问题,也许jsonp是另一种可能的方法。