【发布时间】:2016-08-13 00:00:00
【问题描述】:
我创建了一个 OWIN 托管 WebAPI 2。还有一个使用 API 并充当客户端的网络应用 (AngularJS)。
我已将CORS 的必要代码添加到Startup.cs,并将其托管在与客户端不同的端口上的本地IIS 中,并确认它修复了Cors 问题。
然后,我将这两个应用程序都部署到 Azure(我已将这两个应用程序作为 Web 应用程序放在 Azure 上,并且我还尝试将 OWIN 放入当前处于预览状态的 Azure API)但是 - 预检请求现在失败(否Access-Control-Allow-Origin 出现在响应中)。
问:是否有一些我不知道的特定 Azure?为什么 OWIN 在部署时不提供此标头但它在 localhost 上工作?我在应用程序的 Azure 刀片设置的属性窗口中没有看到任何限制。
注意事项:
关于我正在使用的设置的一些细节:
- 使用
Owin、WebAPI2、Ninject、SignalR - 自定义令牌在每个后续请求的标头中发布和提供,并使用自定义过滤器进行验证。
- 我现在尝试的 Cors 是
*
Startup.cs的相关部分:
public void Configuration(IAppBuilder appBuilder)
{
appBuilder.UseCors(CorsOptions.AllowAll);
HttpConfiguration config = new HttpConfiguration();
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//bind IClientsNotifier with method returning singleton instance of hub
var ninjectKernel = NinjectWebCommon.GetKernel();
ninjectKernel.Bind<MySignalRHub>().ToSelf().InSingletonScope();
ninjectKernel.Bind<QueryStringBearerAuthorizeAttribute>().ToSelf();
GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(ninjectKernel);
appBuilder.Map(
"/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration();
map.RunSignalR(hubConfiguration);
});
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Filters.Add(new NoCacheHeaderFilter()); //the IE9 fix for cache
var resolver = new NinjectDependencyResolver(NinjectWebCommon.GetKernel());
config.Filters.Add((System.Web.Http.Filters.IFilter)resolver.GetService(typeof(WebApiAuthenticationFilter)));
appBuilder.UseNinjectMiddleware(NinjectWebCommon.GetKernel);
appBuilder.UseNinjectWebApi(config);
}
此外,为了支持OPTIONS HTTP 请求,我已经注释掉了web.config 中的以下行(否则,它会抛出 HTTP 错误 405)
<system.webServer>
<handlers>
<!--<remove name="OPTIONSVerbHandler" />-->
...
【问题讨论】:
标签: c# azure cors azure-web-app-service azure-api-apps