通过 Web.config 与 WebApiConfig 和控制器属性启用 CORS
Enabling CORS through Web.config vs WebApiConfig and Controller attributes
似乎有两种功能不同的方法可以在 Web 中启用跨域请求共享 API 2.
一个是导入System.Web.Http.Cors
,用EnableCors
属性装饰一个controller,然后在WebApiConfig中写入config.EnableCors()
:
[EnableCors(origins: "http://111.111.111.111", headers: "*", methods: "*")]
public class GenericController : ApiController
{
// etc.
另一种是修改Web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://111.111.111.111" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
这两种不同的方法在功能上有区别吗?哪一个是正确的 - 这些不是完成同样的事情吗?如果这两种方法都启用CORS,会不会炸毁?
如果您将 header 添加到 web.config,该应用程序提供的每个 请求都将包含指定的 header秒。此方法在 Web 服务器级别受支持,并且不依赖于 config.EnableCors()
的执行。您可以使用该方法添加您想要的任何 HTTP header。
另一方面,EnableCors
属性需要 WebAPI,您需要添加一些代码才能使其工作。对于最终用户来说,结果是一样的。
至于哪种方式更好?我喜欢通过使用属性将这些设置保留在应用程序代码中,这样这些设置对未来的开发人员来说是显而易见的。根据您的需要,您可能想要研究一个抽象 CorsApiController
,您的主要 ApiControllers 可以继承它以一遍又一遍地提供相同的 CORS header。但是,如果 CORS headers 需要因控制器或操作而异,则此方法将不起作用。
似乎有两种功能不同的方法可以在 Web 中启用跨域请求共享 API 2.
一个是导入System.Web.Http.Cors
,用EnableCors
属性装饰一个controller,然后在WebApiConfig中写入config.EnableCors()
:
[EnableCors(origins: "http://111.111.111.111", headers: "*", methods: "*")]
public class GenericController : ApiController
{
// etc.
另一种是修改Web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://111.111.111.111" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
这两种不同的方法在功能上有区别吗?哪一个是正确的 - 这些不是完成同样的事情吗?如果这两种方法都启用CORS,会不会炸毁?
如果您将 header 添加到 web.config,该应用程序提供的每个 请求都将包含指定的 header秒。此方法在 Web 服务器级别受支持,并且不依赖于 config.EnableCors()
的执行。您可以使用该方法添加您想要的任何 HTTP header。
另一方面,EnableCors
属性需要 WebAPI,您需要添加一些代码才能使其工作。对于最终用户来说,结果是一样的。
至于哪种方式更好?我喜欢通过使用属性将这些设置保留在应用程序代码中,这样这些设置对未来的开发人员来说是显而易见的。根据您的需要,您可能想要研究一个抽象 CorsApiController
,您的主要 ApiControllers 可以继承它以一遍又一遍地提供相同的 CORS header。但是,如果 CORS headers 需要因控制器或操作而异,则此方法将不起作用。