如何在 IIS 托管的 C# web 服务中强制访问控制允许来源
Posted
技术标签:
【中文标题】如何在 IIS 托管的 C# web 服务中强制访问控制允许来源【英文标题】:How to force Access-Control-Allow-Origin in an IIS hosted C# webservice 【发布时间】:2019-09-05 18:01:10 【问题描述】:我在 IIS 10 中托管了一个 .net 网络服务。我正在尝试从 Angular 前端的网络服务器获取数据。
我在 IIS 中启用了 Access-Control-Allow-Origin:
我还在我的 Web.Conf 中启用了 customHeaders:
当我尝试从有角度的前端访问 web 服务时,我收到此错误:
我正在使用来自 @angular/common/http 的 HttpClient 并尝试了几种不同的请求,但仍然没有运气。这是我最近一次失败的请求
public GetSlippage(tradeGroup: string, start: string, end: string, period: string, premiumFilter: number): Observable<SlippageContainer>
let url: string = `$this._slippageUrl/$tradeGroup`;
let queryParams: HttpParams = new HttpParams()
.set('start', start)
.set('end', end)
.set('period', 'none')
.set('premium', String(premiumFilter));
let heads: HttpHeaders = new HttpHeaders();
heads = heads.append('Content-Type', 'text/plain');
heads = heads.append('Access-Control-Allow-Origin', '*');
console.log(`Sent Slippage Request $start $end`);
return this._httpClient.get<SlippageContainer>(url, headers: heads, params: queryParams );
由于某种原因,当我使用 http://<serverName>:port/endpoint
时请求会起作用
但不是http://<serverName.domainName.local:port/endpoint
。最终,我希望能够在 url 中使用完全限定的域名。
【问题讨论】:
那些是响应头。 @DanielA.White 你能澄清一下吗?我已经在 IIS 的方法和 web.conf 的 Allow-Methods 中列出了 GET。 【参考方案1】:您需要在您的 asp.net 应用程序中允许 CORS。 在 ConfigureServices 中添加:
services.AddCors(o => o.AddPolicy("AllowAll", builder =>
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
));
并在配置中添加:
app.UseCors("AllowAll");
您可以通过指定方法、标头和来源来制定更严格的策略。
【讨论】:
以上是关于如何在 IIS 托管的 C# web 服务中强制访问控制允许来源的主要内容,如果未能解决你的问题,请参考以下文章
如何强制更新/防止在 Linux 上运行并由 nginx 反向代理服务器托管的 .NET Core Web 应用程序的 HTML 缓存
如何从服务“内部”的代码访问托管在 IIS 中的 WCF 服务的 web.config
如何从 Azure Web 应用程序与 IIS 中本地托管的 WCF 服务进行通信?