【发布时间】:2015-05-15 11:13:24
【问题描述】:
我尝试按照http://enable-cors.org/server_aspnet.html 的步骤进行操作 让我的 RESTful API(用 ASP.NET WebAPI2 实现)处理跨源请求(启用 CORS)。除非我修改 web.config,否则它不起作用。
我安装了 WebApi Cors 依赖:
install-package Microsoft.AspNet.WebApi.Cors -ProjectName MyProject.Web.Api
然后在我的App_Start 中,我的课程WebApiConfig 如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var corsAttr = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(corsAttr);
var constraintsResolver = new DefaultInlineConstraintResolver();
constraintsResolver.ConstraintMap.Add("apiVersionConstraint", typeof(ApiVersionConstraint));
config.MapHttpAttributeRoutes(constraintsResolver);
config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttpControllerSelector(config));
//config.EnableSystemDiagnosticsTracing();
config.Services.Replace(typeof(ITraceWriter), new SimpleTraceWriter(WebContainerManager.Get<ILogManager>()));
config.Services.Add(typeof(IExceptionLogger), new SimpleExceptionLogger(WebContainerManager.Get<ILogManager>()));
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
}
}
但在运行应用程序之后,我向 Fiddler 请求资源,例如: http://localhost:51589/api/v1/persons 在响应中,我看不到应该看到的 HTTP 标头,例如:
Access-Control-Allow-Methods: POST, PUT, DELETE, GET, OPTIONSAccess-Control-Allow-Origin: *
我错过了一些步骤吗?我已经尝试在控制器上使用以下注释:
[EnableCors(origins: "http://example.com", headers: "*", methods: "*")]
结果相同,没有启用 CORS。
但是,如果我在 web.config 中添加以下内容(甚至没有安装 AspNet.WebApi.Cors 依赖项),它就可以工作:
<system.webServer>
<httpProtocol>
<!-- THESE HEADERS ARE IMPORTANT TO WORK WITH CORS -->
<!--
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With, Authorization, name" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
-->
</httpProtocol>
<handlers>
<!-- THESE HANDLERS ARE IMPORTANT FOR WEB API TO WORK WITH GET,HEAD,POST,PUT,DELETE and CORS-->
<!--
<remove name="WebDAV" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-->
</handlers>
任何帮助将不胜感激!
谢谢。
【问题讨论】:
-
我遇到了同样的问题,但我决定直接在控制器中设置 Access-Control-Allow-Origin 标头: HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); //如果需要,添加一些检查 response.Headers.Add("Access-Control-Allow-Origin", "*");
标签: c# rest cors asp.net-web-api2