【问题标题】:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at (URL)跨域请求被阻止:同源策略不允许读取 (URL) 处的远程资源
【发布时间】:2018-12-18 14:06:30
【问题描述】:

我有具有多层(业务层、数据访问层、服务层和 Ui 层)的 Web 应用程序
我在 Ui Layer Razor 页面中调用服务层(Web api)(使用 JQuery 和 Ajax)
作为

<button id="btn">ddd</button>

script type="text/javascript">
    $(document).ready(function () {
        var filmtable = $("#DataTableHtmlId");
        $('#btn').click(function() {
            $.ajax({
                type: 'GET',
                dataType: "json",
                contentType: 'application/json; charset=utf-8',
                url: 'https://localhost:11111/api/film/1',
                withCredentials: true,
                AccessControlAllowCredentials: true,

                success: function(data) {
                    alert(data);
                },
                error: function(data) {

                    alert("err");
                }
        });
        });

    } );
</script>

当调用控制器触发最后一个 ajax 调用的视图时
出现此错误

跨域请求被阻止:同源策略不允许读取位于https://localhost:11111/api/film/1 的远程资源。 (原因: CORS 标头“Access-Control-Allow-Origin”缺失)。[了解更多]

跨域请求被阻止:同源策略不允许读取 https://localhost:11111/api/film/1 的远程资源。 (原因: CORS 请求未成功)。

搜索后我找到了很多解决方案 将 CorsConfigureServices 中注册为

            //Cors policy is added to controllers via [EnableCors("CorsPolicy")]
            //or .UseCors("CorsPolicy") globally
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            });

并在 Configure 中应用 CORS 为

        //Apply CORS.
         app.UseCors("CorsPolicy");
         app.UseHttpsRedirection();
         app.UseAuthentication();
         app.UseMvc(); 

但也出现错误有什么帮助吗?

【问题讨论】:

  • 您能否告知 app.UseCors("CorsPolicy") 是否在任何定义的端点之前被调用(在调用 UseMvc() 之前)。 “CORS 中间件必须在任何定义的端点之前”。如果您的服务器响应在您发出请求时提供“Access-Control-Allow-Origin”标头,您能否验证(使用我们的 F12)?问候。
  • 我知道这个问题 app.UseCors("CorsPolicy"); app.UseHttpsRedirection(); app.UseAuthentication(); app.UseMvc();我通过添加使用顺序更新了问题
  • 您确定异步 ajax 请求有效吗?我已经有了经验,尽管异步调用存在问题,但有时我会收到此跨域请求错误。您是否在浏览器的开发者工具的网络选项卡下发现任何错误?
  • 你在哪里添加Cors配置?您需要将其添加到 api 项目而不是 ui 项目。
  • @Tao Zhou 谢谢我已将它添加到 ui 项目中。改变它并把它放在api中它工作:)

标签: asp.net-web-api asp.net-core


【解决方案1】:

来自评论的解决方案

在api项目而不是ui项目中启用CORS配置。

【讨论】:

    猜你喜欢
    • 2016-07-19
    • 2021-04-04
    • 2014-10-17
    • 2015-07-22
    • 2018-04-20
    • 2014-07-20
    相关资源
    最近更新 更多