我已经部署了我的web和api项目来分离Azure webapps并且正在努力解决CORS问题。在本地部署时,一切正常,但不会发布到Azure。
我使用两种不同的方法来启用CORS,似乎都没有解决我的问题。
潜在修复:
<add name="Access-Control-Allow-Origin" value="*" />
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
引用上述两个修复的方案如下:
问题:如何为Azure中托管的.NET Web Api项目全局启用CORS?
appstart并注册代码:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
public static void Register(HttpConfiguration config)
{
// Enable CORS
// TODO, * below is debug only
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
答案 0 :(得分:0)
我认为这是IIS默认optionshandler的常见问题。您必须更新Web.Config以禁用默认处理程序。这就是我用于Azure上托管的ASP.Net vnext的内容。
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="WebDav" />
<remove name="OPTIONSVerbHandler" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
答案 1 :(得分:0)
我发现将允许标头添加到web.config是让事情适合我的最简单方法。请注意,您不能同时使用这两种方法。
我相信你的405 Not Allowed错误的解决方案是你还需要在web.config中包含这样的一行:
<add name="Access-Control-Allow-Headers" value="Authorization, Origin, Content-Type "/>
如果您仍然收到该错误,则可能需要在此列表中包含其他值:
&lt; add name =&#34; Access-Control-Allow-Headers&#34;值=&#34;访问控制允许标题,授权,来源,接受,X请求,内容类型,访问控制请求方法,访问控制请求标题&#34; /&GT;