appsettings.json 中的 AllowedHosts 和 .NET Core API 3.x 中的 UseCors 之间的区别

oma*_*idi 24 .net c# .net-core

我看到 .NET Core 3.x 带有一个新的特殊配置AllowedHosts,用于列出允许访问站点的主机,而 CORS (app.UseCors) 已经存在此选项。

这两个选项有什么区别?

The*_*iot 32

根据文档allowedHosts用于主机过滤以将您的应用程序绑定到特定主机名。例如,如果您替换以下内容:

"AllowedHosts": "*"
Run Code Online (Sandbox Code Playgroud)

"AllowedHosts": "example.com"
Run Code Online (Sandbox Code Playgroud)

并且您尝试使用http://localhost:xxxx/地址访问您的应用程序,您将获得默认的错误请求 (400) 响应。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>

<HEAD>
    <TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
    </ HEAD>

<BODY>
    <h2>Bad Request - Invalid Hostname</h2>
    <hr>
    <p>HTTP Error 400. The request hostname is invalid.</p>
</BODY>

</HTML>
Run Code Online (Sandbox Code Playgroud)

由于主机过滤中间件不允许应用程序将应用程序绑定到除example.com.

CORS

另一方面,CORS 用于控制哪些主机尝试访问您的应用程序上的资源 (API)。

  • 从技术上讲,CORS 不会禁止调用 API,但它会禁止浏览器呈现响应。电话仍然拨通。 (9认同)
  • 我们可以将多个条目以逗号分隔的方式添加到允许的主机部分吗?像“localhost,devserver.domain”或类似的东西? (4认同)
  • @Ak777 是的,你可以。该值是以分号分隔的主机名列表,不带端口号,例如“example.com;localhost”。 (4认同)
  • @TheVillageIdiot 在什么情况下这会有帮助? (2认同)