c# - .net 核心 2.1 CORS api
问题描述
我有一个处理后 ajax 请求的 api。当我调用它时,我收到了臭名昭著的 Cors 错误消息:
CORS 策略已阻止从源 '' 访问 XMLHttpRequest:请求的资源上不存在“Access-Control-Allow-Origin”标头
没问题。我以前做过,他们有很多资源(例如在 ASP .NET Core 2.1 Web Api 中启用 CORS)描述如何向启动添加 cors 策略。问题是我似乎无法让它工作。
这是我的 Sarup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
});
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
// User settings
options.User.RequireUniqueEmail = true;
options.SignIn.RequireConfirmedEmail = true;
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequiredUniqueChars = 1;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = false;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddTransient<IEmailSender, EmailSender>();
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
RoleManager<IdentityRole> roleManager, IServiceProvider serviceProvider)
{
app.UseCors(MyAllowSpecificOrigins);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseDatabaseErrorPage();
app.UseCors(MyAllowSpecificOrigins);
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseCors(MyAllowSpecificOrigins);
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
//UserDbContextSeed.Seed(serviceProvider).Wait();
}//Configure
}
}
这是我的控制器的路由属性:
[Route("api/v23")]
这是我的方法签名
[Route("[action]")]
[HttpPost]
[IgnoreAntiforgeryToken]
public IActionResult Post_Data(model v){......}
最后这是我的ajax请求:
$.ajax({
type: 'POST',
url: 'Myserver/api/v23/Post_Data',
dataType: 'json',
contentType: "application/json", //
data: JSON.stringify(Param),
success: function (result) {
console.log(results);
},
error: function (request, status, error) {
console.log(error);
}
});
我尝试将 [Enable CORS("__myAllowSpecificOrigins") 属性添加到控制器,但这也不起作用。这应该不难,我显然遗漏了一些明显的东西。
有什么建议吗?
解决方案
尝试将 AddCors 的语法更改为:
services.AddCors(o => o.AddPolicy(AllowSpecificOrigins, builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
推荐阅读
- html - 为 html 编辑器应用条件 css 样式表
- javascript - 如何使用 Webdatarocks 获取列的总计并在图表中使用它
- php - php 复制的文件上传问题($_FILES 不起作用
- c++ - 为什么我在此代码中收到 SIGSEGV 错误?
- r - 使用来自另一个数据框 R 的信息添加列
- c++ - C++ 隐式构造如何工作,结构初始化?
- javascript - JS Promise:调用一个在resolve中有return语句的函数
- flutter - 如何在 listView.builder 中找到可以跳转到的最后一个值?
- c++ - 刽子手游戏 - 如何在 C++ 中做“错误猜测”?
- azul-zulu - Azul Zulu JRE 中 crs-agent.jar 的用途是什么?