Dav*_*ave 5 javascript c# cors asp.net-web-api
与CORS战斗.我有一个网站正在为我在C#中构建的WEB API创建一个简单的XmlHttpRequest.
var xhr = new XMLHttpRequest();
xhr.open("GET","https://server/controller/method", true);
xhr.send();
Run Code Online (Sandbox Code Playgroud)
在我的web.config中,我完成了以下操作:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
我还尝试安装Nuget包并在我的WebApiConfig.cs中执行以下操作
var cors = new EnableCorsAttribute(
origins: "*",
headers: "*",
methods: "*");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
尽管做了这些努力,CORS仍然无效.在FireFox控制台中,我收到以下错误:
跨源请求已阻止:同源策略不允许在https:// server上读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决.
IE也只是失败并且没有错误.
根据我读过的所有内容,其中一个解决方案应该可以工作,但事实并非如此.是否需要在客户端JavaScript中启用/更改某些内容?在localhost上运行Visual Studio IIS Express时,CORS不起作用:PortNumber?我错过了什么?
在您的客户端 JavaScript 代码中,您可以尝试添加以下内容:
\nxhr.withCredentials = true;\nRun Code Online (Sandbox Code Playgroud)\n正如Firefox 的“跨源请求被阻止”中所示,尽管有标头:
\n\n\n否则 Firefox 在发出请求时无法使用客户端证书
\n
但是,如果您对客户端代码进行更改,您还必须更改服务器端代码,因此 的值Access-Control-Allow-Origin不是*。有几种方法可以做到这一点\xe2\x80\xa6
在 IIS 配置中,您可以使用URL 重写模块来完成此操作,方法是将以下内容添加到您的Web.config或.ApplicationHost.config%SystemDrive%\\inetpub\\wwwroot\\
xhr.withCredentials = true;\nRun Code Online (Sandbox Code Playgroud)\n如果上述方法不起作用,那么您可以尝试在 IIS 中的 CORS 问题中使用 Access-Control-Allow-Origin 中的凭据和通配符的答案中的版本。
\n另一种方法:在global.asax您的服务的代码或其他代码中,添加如下内容:
if (ValidateRequest()) {\n Response.Headers.Remove("Access-Control-Allow-Origin");\n Response.AddHeader("Access-Control-Allow-Origin", Request.Headers["origin"]);\n Response.Headers.Remove("Access-Control-Allow-Credentials");\n Response.AddHeader("Access-Control-Allow-Credentials", "true");\n Response.Headers.Remove("Access-Control-Allow-Methods");\n Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");\n}\nRun Code Online (Sandbox Code Playgroud)\n...其中最重要的部分是:
\nResponse.AddHeader("Access-Control-Allow-Origin", Request.Headers["origin"]);\nRun Code Online (Sandbox Code Playgroud)\n如果这些都不起作用,请尝试使用Microsoft.AspNet.WebApi.Cors.
| 归档时间: |
|
| 查看次数: |
2996 次 |
| 最近记录: |