HTTP routing

Controlling the route prefix with host.json

By default Azure Functions has a route prefix on all functions /api/. To change this, access the routePrefix property in the http field of host.json. To remove it completely, leave the field blank.

{
  "http": {
    "routePrefix": ""
  }
}

This would turn http://yourUrl/api/Example into http://yourUrl/Example.

Takeaways

  • Route prefixes are customizable and removable using host.json.

Read more

Define the function route with function properties

There are several ways to define function routes. One of those ways is in the function header.

[FunctionName("Example")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route="Example")]HttpRequestMessage req,
                                                   TraceWriter log)
{
    log.Info($"C# HTTP trigger function processed a request");

    return new HttpResponseMessage(HttpStatusCode.Accepted);
}

Define the function route in the Azure portal

Routes can also be controlled from the integrate tab of your function in the Azure portal.

Enter the route that you want your function to have in the Route template box on the page.

Takeaways

  • The Azure portal allows you to change your routes in the Integrate tab.
  • If you are using continuous deployment for your functions, any settings changed will be reset on redeployment.

Read more

Adding parameters to function routes

To add parameters to your route, put the parameter in curly braces in the route property of the HttpTrigger attribute, and add it in the method parameters.

[FunctionName("Example")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route="Example/{parameter}")]HttpRequestMessage req,
                                                   string parameter,
                                                   TraceWriter log)
{
    log.Info($"C# HTTP trigger function processed a request {parameter}");

    return new HttpResponseMessage(HttpStatusCode.Accepted);
}

Making route parameters optional

In order to make route parameters optional in your function call, add a ? after the parameter name in the route definition and the type in the function header.

[FunctionName("Example")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route="Example/{parameter?}")]HttpRequestMessage req,
                                                  string parameter,
                                                  TraceWriter log)
{
    log.Info($"C# HTTP trigger function processed a request {parameter}");

    return new HttpResponseMessage(HttpStatusCode.Accepted);
}