diff --git a/src/WebJobs.Script.Cli/Actions/HostActions/StartHostAction.cs b/src/WebJobs.Script.Cli/Actions/HostActions/StartHostAction.cs index 1100fa4012..ce0b430825 100644 --- a/src/WebJobs.Script.Cli/Actions/HostActions/StartHostAction.cs +++ b/src/WebJobs.Script.Cli/Actions/HostActions/StartHostAction.cs @@ -6,13 +6,16 @@ using System.IO; using System.Linq; using System.Net.Http; +using System.Net.Http.Formatting; using System.ServiceModel; using System.Threading.Tasks; using System.Web.Http; +using System.Web.Http.Cors; using System.Web.Http.SelfHost; using Colors.Net; using Fclp; using Microsoft.Azure.WebJobs.Script.WebHost; +using Microsoft.Azure.WebJobs.Script.WebHost.Common; using Microsoft.Azure.WebJobs.Script.WebHost.Kudu; using Newtonsoft.Json.Linq; using WebJobs.Script.Cli.Common; @@ -36,6 +39,8 @@ class StartHostAction : BaseAction, IDisposable public TraceLevel ConsoleTraceLevel { get; set; } + public string CorsOrigins { get; set; } + public override ICommandLineParserResult ParseArgs(string[] args) { Parser @@ -56,6 +61,12 @@ public override ICommandLineParserResult ParseArgs(string[] args) .SetDefault(DefaultDebugLevel) .Callback(p => ConsoleTraceLevel = p); + Parser + .Setup("cors") + .WithDescription($"A comma separated list of CORS origins with no spaces. Example: https://functions.azure.com,https://functions-staging.azure.com") + .SetDefault(LocalhostConstants.AzureFunctionsCors) + .Callback(c => CorsOrigins = c); + return Parser.Parse(args); } @@ -70,6 +81,11 @@ public override async Task RunAsync() TransferMode = TransferMode.Streamed }; + var cors = new EnableCorsAttribute(CorsOrigins, "*", "*"); + config.EnableCors(cors); + config.Formatters.Clear(); + config.Formatters.Add(new JsonMediaTypeFormatter()); + var settings = SelfHostWebHostSettingsFactory.Create(NodeDebugPort, ConsoleTraceLevel); Environment.SetEnvironmentVariable("EDGE_NODE_PARAMS", $"--debug={settings.NodeDebugPort}", EnvironmentVariableTarget.Process); diff --git a/src/WebJobs.Script.Cli/WebJobs.Script.Cli.csproj b/src/WebJobs.Script.Cli/WebJobs.Script.Cli.csproj index 1078b3b3c5..a9567d10aa 100644 --- a/src/WebJobs.Script.Cli/WebJobs.Script.Cli.csproj +++ b/src/WebJobs.Script.Cli/WebJobs.Script.Cli.csproj @@ -150,6 +150,10 @@ ..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll True + + ..\..\packages\Microsoft.AspNet.WebApi.Cors.5.2.3\lib\net45\System.Web.Http.Cors.dll + True + ..\..\packages\Microsoft.AspNet.WebApi.SelfHost.5.2.3\lib\net45\System.Web.Http.SelfHost.dll True diff --git a/src/WebJobs.Script.Cli/packages.config b/src/WebJobs.Script.Cli/packages.config index be5751340a..df84af1c1d 100644 --- a/src/WebJobs.Script.Cli/packages.config +++ b/src/WebJobs.Script.Cli/packages.config @@ -10,6 +10,7 @@ + diff --git a/src/WebJobs.Script.WebHost/App_Start/WebApiConfig.cs b/src/WebJobs.Script.WebHost/App_Start/WebApiConfig.cs index 75d1fdc529..29433025d2 100644 --- a/src/WebJobs.Script.WebHost/App_Start/WebApiConfig.cs +++ b/src/WebJobs.Script.WebHost/App_Start/WebApiConfig.cs @@ -4,15 +4,12 @@ using System; using System.IO; using System.Net.Http; -using System.Net.Http.Formatting; using System.Web; using System.Web.Http; -using System.Web.Http.Cors; using System.Web.Http.Routing; using Autofac; using Autofac.Integration.WebApi; using Microsoft.Azure.WebJobs.Script.Config; -using Microsoft.Azure.WebJobs.Script.WebHost.Common; using Microsoft.Azure.WebJobs.Script.WebHost.Controllers; using Microsoft.Azure.WebJobs.Script.WebHost.Handlers; @@ -43,14 +40,6 @@ public static class WebApiConfig settingsManager = settingsManager ?? ScriptSettingsManager.Instance; settings = settings ?? GetDefaultSettings(settingsManager); - if (settings.IsSelfHost) - { - var cors = new EnableCorsAttribute(LocalhostConstants.AzureFunctionsCors, "*", "*"); - config.EnableCors(cors); - config.Formatters.Clear(); - config.Formatters.Add(new JsonMediaTypeFormatter()); - } - var builder = new ContainerBuilder(); builder.RegisterApiControllers(typeof(FunctionsController).Assembly); AutofacBootstrap.Initialize(settingsManager, builder, settings, config);