in src/WebJobs.Script.WebHost/WebScriptHostHttpRoutesManager.cs [29:112]
public void InitializeHttpFunctionRoutes(IScriptJobHost host)
{
var routesLogBuilder = new StringBuilder();
routesLogBuilder.AppendLine("Initializing function HTTP routes");
_router.ClearRoutes();
// TODO: FACAVAL Instantiation of the ScriptRouteHandler should be cleaned up
WebJobsRouteBuilder routesBuilder = _router.CreateBuilder(new ScriptRouteHandler(_loggerFactory, host, _environment, false), _httpOptions.Value.RoutePrefix);
// Proxies do not honor the route prefix defined in host.json
WebJobsRouteBuilder proxiesRoutesBuilder = _router.CreateBuilder(new ScriptRouteHandler(_loggerFactory, host, _environment, true), routePrefix: null);
WebJobsRouteBuilder warmupRouteBuilder = null;
if (!_environment.IsAnyLinuxConsumption() && !_environment.IsWindowsConsumption())
{
warmupRouteBuilder = _router.CreateBuilder(new ScriptRouteHandler(_loggerFactory, host, _environment, isProxy: false, isWarmup: true), routePrefix: "admin");
}
foreach (var function in host.Functions)
{
var httpTrigger = function.HttpTriggerAttribute;
if (httpTrigger != null)
{
var constraints = new RouteValueDictionary();
if (httpTrigger.Methods != null)
{
constraints.Add("httpMethod", new HttpMethodRouteConstraint(httpTrigger.Methods));
}
string route = httpTrigger.Route;
bool isProxy = function.Metadata.IsProxy();
if (string.IsNullOrEmpty(route) && !isProxy)
{
route = function.Name;
}
WebJobsRouteBuilder builder = isProxy ? proxiesRoutesBuilder : routesBuilder;
builder.MapFunctionRoute(function.Metadata.Name, route, constraints, function.Metadata.Name);
LogRouteMap(routesLogBuilder, function.Metadata.Name, route, httpTrigger.Methods, isProxy, _httpOptions.Value.RoutePrefix);
}
else if (warmupRouteBuilder != null && !_environment.IsInValidationMode() && function.IsWarmupFunction())
{
warmupRouteBuilder.MapFunctionRoute(function.Metadata.Name, "warmup", function.Metadata.Name);
}
}
IRouter proxyRouter = null;
IRouter functionRouter = null;
if (routesBuilder.Count == 0 && proxiesRoutesBuilder.Count == 0)
{
routesLogBuilder.AppendLine("No HTTP routes mapped");
}
else
{
if (proxiesRoutesBuilder.Count > 0)
{
proxyRouter = proxiesRoutesBuilder.Build();
}
if (routesBuilder.Count > 0)
{
functionRouter = routesBuilder.Build();
}
}
_router.AddFunctionRoutes(functionRouter, proxyRouter);
if (warmupRouteBuilder != null)
{
// Adding the default admin/warmup route when no warmup function is present
if (warmupRouteBuilder.Count == 0)
{
warmupRouteBuilder.MapFunctionRoute(string.Empty, "warmup", string.Empty);
}
IRouter warmupRouter = warmupRouteBuilder.Build();
_router.AddFunctionRoutes(warmupRouter, null);
}
ILogger logger = _loggerFactory.CreateLogger<WebScriptHostHttpRoutesManager>();
logger.LogInformation(routesLogBuilder.ToString());
}