Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何允许ASP.NET WebForms端点的CORS?_C#_Asp.net_.net_Webforms_Cors - Fatal编程技术网

C# 如何允许ASP.NET WebForms端点的CORS?

C# 如何允许ASP.NET WebForms端点的CORS?,c#,asp.net,.net,webforms,cors,C#,Asp.net,.net,Webforms,Cors,我正在尝试向Webforms样式的web应用程序(.aspx和.asmx)添加一些带注释的端点函数 我想用[EnableCors]注释这些端点,从而获得所有良好的ajax飞行前功能 VS2013接受注释,但端点仍然不能很好地使用CORS。(当使用同一原点而不是交叉原点时,它们工作正常) 我甚至不能让它们在向下和向下的情况下运行 HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*"); 方法——我

我正在尝试向Webforms样式的web应用程序(.aspx和.asmx)添加一些带注释的端点函数

我想用
[EnableCors]
注释这些端点,从而获得所有良好的ajax飞行前功能

VS2013接受注释,但端点仍然不能很好地使用CORS。(当使用同一原点而不是交叉原点时,它们工作正常)

我甚至不能让它们在向下和向下的情况下运行

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
方法——我的浏览器拒绝响应,并且不会显示跨源响应头


如何在这些
[WebMethod]
端点中获得CORS功能?

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

  • 配置
  • 配置

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

我建议您仔细检查您是否执行了本页上的所有步骤:

除此之外:

Response.AppendHeader("Access-Control-Allow-Origin", "*");
还可以尝试:

Response.AppendHeader("Access-Control-Allow-Methods","*");
尝试直接在web配置中添加:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" value="*" />
       <add name="Access-Control-Allow-Headers" value="Content-Type" />
     </customHeaders>
   </httpProtocol>
</system.webServer>


否则,您需要确保对这两个域都有控制权。

如果您需要飞行前请求,例如,为了发送经过身份验证的请求,您无法设置
访问控制允许来源:
。它必须是特定的
来源
域。
此外,如果使用的不是默认值,还必须设置
访问控制允许方法
访问控制允许标头
响应标头。
(请注意,这些约束正是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方法发送特定于缓存的头,同时使用缓存对象模型(cache)设置缓存策略,则在使用缓存对象模型时,可能会删除与缓存相关的HTTP响应头。此行为使ASP.NET能够维护最严格的设置。例如,考虑包含用户控件的页面。如果这些控件具有冲突的缓存策略,则将使用限制最严格的缓存策略。如果一个用户控件通过调用SetCacheability设置标题“Cache control:Public”,而另一个用户控件设置更严格的标题“Cache control:Private”,则“Cache control:Private”标题将与响应一起发送

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

<httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" values="*" />        
     </customHeaders>
   <httpProtocol>

您可以在MVC中这样做

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

对于web表单,您可以使用

AddHeader(“访问控制允许来源”,“*”)

而不是

AppendHeader(“访问控制允许原点”、“*”)


第一个适用于旧版本的ASP.Net Web表单。

WebForms主动使标题修改变得困难,例如,一旦有内容发送给用户,就无法更改标题。这里有一个我以前使用过的黑客:另一种使用webconfig的方法,以及一种使用owin中间件操作头的更现代的方法:也许json是另一种可能的方法。怎么读?我猜你把
JSONP
误读为
JSON
。JSONP响应是封装在函数调用中的标准JSON字符串。每个现代浏览器都能够评估JSONP响应,而无需源域策略限制。你可以找到一些c语言的解决方案,就像这样你是世界上最伟大的程序员!诗歌将被书写,身份将以你神圣的名字建立!这不是正确的答案,用户询问了一种在webmethods上启用CORS的方法,而不是webapiOP在MVC中这样做,正如他在文章标题中指定的那样。