我在IIS 8.5中托管了.net核心api api。 我想仅允许来自某个域的请求到达api。
我查看了IIS Rewrite模块,看到可以在那里设置规则。这是最好的方法吗?
答案 0 :(得分:0)
您实际上会发现您的网页无论如何都无法直接与API通信。这是一种安全形式,因此页面上的javascript不能/不应该只能调用另一个域。
这称为Same-Origin策略,这意味着页面上的任何脚本只能将HttpRequests发送到同一个域。 Mozilla在这里解释得比我更好:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
所以你的问题实际上是,如何打开我的API来跨越原始调用,但仅限于我的特定域。 .net核心已经让你满意了!
首先安装以下Nuget包:
Install-Package Microsoft.AspNetCore.Cors
接下来,在startup.cs的ConfigureServices方法中,您需要添加CORS服务。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
}
现在您需要将CORS添加到管道中。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors( options => options.WithOrigins("http://example.com").AllowAnyMethod() );
app.UseMvc();
}
现在,您的API项目应允许跨域调用,但仅适用于您的域。当然,这并不能阻止人们手动调用您的API,但这意味着不受您控制的域上的恶意脚本无法使用户不知道调用。
更多信息:http://dotnetcoretutorials.com/2017/01/03/enabling-cors-asp-net-core/