当前位置: 首页 > 知识库问答 >
问题:

启用上CORS的选项标题。NET Core Web API

袁玮
2023-03-14

我在Stackoverflow上找不到解决方案后解决了这个问题,所以我在这里分享我的问题和答案中的解决方案。

在我的中启用跨域策略后。NET核心Web Api应用程序和AddCors,它仍然无法在浏览器上工作。这是因为包括Chrome和Firefox在内的浏览器首先会发送一个选项请求,而我的应用程序只会响应204个没有内容的请求。

共有3个答案

柳梓
2023-03-14

这对我很有效:

确保这:

app.UseCors(builder => {
    builder.AllowAnyOrigin();
    builder.AllowAnyMethod();
    builder.AllowAnyHeader();
});

发生在以下任何一个之前:

app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseCookiePolicy();

记住,我们正在处理一个“管道”。cors的东西必须是第一个。

-金扎尼

扈翰
2023-03-14

我知道它已经被回答了。只是用更新的信息来回答。所以它会帮助其他人。

它现在内置到ASP。NET核心框架。

只需跟随https://docs.microsoft.com/en-us/aspnet/core/security/cors

并替换

    app.UseCors(builder =>
   builder.WithOrigins("http://example.com"));

        app.UseCors(builder =>
       builder.WithOrigins("http://example.com")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials());
戚泰
2023-03-14

向项目中添加一个中间件类来处理选项动词。

using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting;

namespace Web.Middlewares
{
    public class OptionsMiddleware
    {
        private readonly RequestDelegate _next;

        public OptionsMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public Task Invoke(HttpContext context)
        {
            return BeginInvoke(context);
        }

        private Task BeginInvoke(HttpContext context)
        {
            if (context.Request.Method == "OPTIONS")
            {
                context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { (string)context.Request.Headers["Origin"] });
                context.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Origin, X-Requested-With, Content-Type, Accept" });
                context.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" });
                context.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" });
                context.Response.StatusCode = 200;
                return context.Response.WriteAsync("OK");
            }

            return _next.Invoke(context);
        }
    }

    public static class OptionsMiddlewareExtensions
    {
        public static IApplicationBuilder UseOptions(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<OptionsMiddleware>();
        }
    }
}

然后添加应用程序。UseOptions() 这是启动中的第一行。配置方法中的cs。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseOptions();
}
 类似资料:
  • 每次对服务进行PUT Ajax调用时,它都会返回以下错误: 用于处理所有选项请求控制器:

  • 问题内容: IE11由于某种原因拒绝了PUT请求,但仅当我使用https时。我很难找到问题,因为使用http,localhost和其他浏览器可以正常工作。 控制台显示两个错误 从浏览器发送的OPTION请求是 服务器的响应如下: AngularJS用于客户端标准$ http PUT。服务器端使用带有jersey的Java,请求过滤器来处理CORS如下: 也许您可以看到问题所在。 谢谢 问题答案:

  • 如何在Spring Security标签(即令牌url)中启用CORS。我使用的是spring security 3.1和spring mvc 4.3.12。我已成功生成令牌以保护API,但无法在令牌url中启用CORS。我使用了以下代码来生成访问令牌 spring-security.xml 这就是我启用CORS但不起作用的方式 dispatcher servlet。xml 这就是我得到的错误 登

  • 问题内容: 我有这个wordpress网站,带有一个名为JSON API的插件。此插件为wordpress中的内容提供JSON格式。我可以通过添加header(“ Access-Control-Allow-Origin:*”)来在wordpress上启用CORS。在php标头上。但是,当我尝试使用JSON API插件提供的CORS的网址时,它不再起作用。 这是我正在测试的wordpress网站…我

  • 我有一个非常简单的例子,我不能去工作。 我有我的域来建模我的数据库和我的存储库。 Spring数据Rest和Cors 并尝试了下面的代码,但没有成功。 我添加了一个catch all来测试,它应该允许所有CORS wise通过,但是我仍然得到No'Access-Control-Allow-Origin',即使我有“*”。 最终找到了精确的解。我不确定我所拥有的和这种方法之间的区别,但这似乎是有效的

  • 我在一个应用程序中有一个带有Oauth身份验证和资源服务器的Spring启动应用程序。我的前端在一个单独的服务器上,来自一个单独的位置。我的前端应用程序似乎没有将预检操作进行到后端,后端总是以401响应。我的配置如下所示: 请注意,我还必须为静态内容添加例外,因为尽管有任何文档,它似乎无法以其他方式工作。 我试图更明确地指定,但也没有成功: 此时,我无法确定是否遗漏了任何重要的配置,以通过身份验证