我在Stackoverflow上找不到解决方案后解决了这个问题,所以我在这里分享我的问题和答案中的解决方案。
在我的中启用跨域策略后。NET核心Web Api应用程序和AddCors,它仍然无法在浏览器上工作。这是因为包括Chrome和Firefox在内的浏览器首先会发送一个选项请求,而我的应用程序只会响应204个没有内容的请求。
这对我很有效:
确保这:
app.UseCors(builder => {
builder.AllowAnyOrigin();
builder.AllowAnyMethod();
builder.AllowAnyHeader();
});
发生在以下任何一个之前:
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseCookiePolicy();
记住,我们正在处理一个“管道”。cors的东西必须是第一个。
-金扎尼
我知道它已经被回答了。只是用更新的信息来回答。所以它会帮助其他人。
它现在内置到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());
向项目中添加一个中间件类来处理选项动词。
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响应。我的配置如下所示: 请注意,我还必须为静态内容添加例外,因为尽管有任何文档,它似乎无法以其他方式工作。 我试图更明确地指定,但也没有成功: 此时,我无法确定是否遗漏了任何重要的配置,以通过身份验证