我有一个.net核心api,我只想接受来自一个域的呼叫。那里有一个Angular 4应用程序。
我正在创建像这样的cors政策......
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
builder => builder.WithOrigins("http://www.test.com").AllowAnyHeader());
});
我正在装载它......
app.UseCors("AllowSpecificOrigin");
我原本预计只有来自域上的Angular应用程序的调用能够命中api,但是如果我在Chrome Postman中创建一个调用,我仍然可以直接命中api。
我做错了什么?我希望锁定除Angular应用程序之外的所有流量。
以下是我的startup.cs的更多细节......
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCors();
services.Configure<AppSettings>(Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors(builder => builder.WithOrigins(new[] { "http://test.com" })
.AllowCredentials());
app.UseDeveloperExceptionPage();
app.UseMvc(routes =>
{
routes.MapRoute(
"default",
"{controller=ping}/{action=get}/{id?}");
});
app.UseStaticFiles();
}
答案 0 :(得分:0)
响应更容易:
CORS标头仅在跨域请求See that example
上发送
因此,当您在本地进行测试时,它无法正常工作。尝试在具有域的服务器上托管您的应用并使用邮递员进行呼叫。它不会起作用。
编辑:
好的,你的配置文件是不正确的。您需要在AddCors
之前加AddMVC
。因为,在执行管道中,框架将按启动时声明的顺序执行..
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
politique => politique.WithOrigins("{yourdomain}").AllowAnyHeader().AllowAnyMethod().AllowCredentials());
});
eapp.UseCors("AllowSpecificOrigin");