【发布时间】:2017-12-03 02:09:11
【问题描述】:
我有一个 .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();
}
【问题讨论】:
-
这听起来很有趣,服务器的标头响应是什么? (您是在使用 Kestrel 吗?还是使用 IIS 管道)
-
响应中的标题如下所示... Content-Encoding →gzip Content-Type →text/plain; charset=utf-8 日期 →Thu, 2017 Jun 29 11:45:28 GMT 服务器 →Kestrel Transfer-Encoding →chunked Vary →Accept-Encoding X-Powered-By →ASP.NET
-
嗯,我不确定是否考虑了您的政策。 Kestrel 应该添加一个标题(看看这个微软的例子docs.microsoft.com/en-us/aspnet/core/security/…)
-
我认为是因为如果你不设置它网站无法访问api,但是邮递员总是可以的。
-
您的问题解决了吗?
标签: angular asp.net-web-api asp.net-core cors