WebJobs.Extensions.HttpApi
3.0.0
dotnet add package WebJobs.Extensions.HttpApi --version 3.0.0
NuGet\Install-Package WebJobs.Extensions.HttpApi -Version 3.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="WebJobs.Extensions.HttpApi" Version="3.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add WebJobs.Extensions.HttpApi --version 3.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: WebJobs.Extensions.HttpApi, 3.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install WebJobs.Extensions.HttpApi as a Cake Addin #addin nuget:?package=WebJobs.Extensions.HttpApi&version=3.0.0 // Install WebJobs.Extensions.HttpApi as a Cake Tool #tool nuget:?package=WebJobs.Extensions.HttpApi&version=3.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
HTTP API Extensions for Azure Functions
Features
- Better route precedence
- Model validation
- ASP.NET Core like helpers
- Support URL generation
- Handle static files
- Simple reverse proxy
- Streamlined SPA / SSG hosting
Installation
# For .NET 6/8 In-Process
Install-Package WebJobs.Extensions.HttpApi
# For .NET Isolated Worker
Install-Package Functions.Worker.Extensions.HttpApi
# For .NET 6/8 In-Process
dotnet add package WebJobs.Extensions.HttpApi
# For .NET Isolated Worker
dotnet add package Functions.Worker.Extensions.HttpApi
// Inherits from `HttpFunctionBase` class
public class Function1(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req,
ILogger log)
{
return Ok($"Hello, {req.Query["name"]}");
}
}
Examples
Model validation
public class Function1(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "post")]
SampleModel model,
ILogger log)
{
if (!TryValidateModel(model))
{
return BadRequest(ModelState);
}
return Ok(model);
}
}
public class SampleModel
{
[Required]
public string Name { get; set; }
public string[] Array { get; set; }
[Range(100, 10000)]
public int Price { get; set; }
}
ASP.NET Core like helpers
public class Function2(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function2")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
ILogger log)
{
Response.Headers.Add("Cache-Control", "no-cache");
return Ok($"Now: {DateTime.Now}");
}
}
Support URL generation
public class Function3(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function3")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "route/{id}")]
HttpRequest req,
string id,
ILogger log)
{
return CreatedAtFunction("Function3", new { id = "kazuakix" }, null);
}
}
Handle static files
public class Function1(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req,
ILogger log)
{
return File("sample.html");
}
}
Simple reverse proxy
public class Function1(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "{*path}"})] HttpRequest req,
ILogger log)
{
return Proxy("https://example.com/{path}");
}
}
Streamlined SPA / SSG hosting
public class Function1(IHttpContextAccessor httpContextAccessor) : HttpFunctionBase(httpContextAccessor)
{
[FunctionName("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "{*path}"})] HttpRequest req,
ILogger log)
{
#if USE_REMOTE
return RemoteStaticApp("https://example.com", fallbackExclude: $"^/_nuxt/.*");
#else
return LocalStaticApp(fallbackPath: "404.html", fallbackExclude: $"^/_nuxt/.*");
#endif
}
}
License
This project is licensed under the MIT License
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- Microsoft.Azure.WebJobs.Extensions.Http (>= 3.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (3)
Showing the top 3 popular GitHub repositories that depend on WebJobs.Extensions.HttpApi:
Repository | Stars |
---|---|
shibayan/keyvault-acmebot
Automated ACME SSL/TLS certificates issuer for Azure Key Vault (App Service / Container Apps / App Gateway / Front Door / CDN / others)
|
|
shibayan/appservice-acmebot
Automated ACME SSL/TLS certificates issuer for Azure App Service (Web Apps / Functions / Containers)
|
|
shibayan/containerapps-acmebot
Automated ACME SSL/TLS certificates issuer for Azure Container Apps (Custom domain / Custom DNS Suffix)
|
Version | Downloads | Last updated |
---|---|---|
3.0.0 | 242 | 11/18/2024 |
3.0.0-preview1 | 90 | 8/4/2024 |
2.1.0 | 4,909 | 8/18/2023 |
2.0.3 | 9,941 | 12/9/2021 |
2.0.2 | 414 | 12/8/2021 |
2.0.1 | 557 | 12/8/2021 |
2.0.0 | 4,788 | 11/13/2021 |
2.0.0-preview5 | 239 | 11/11/2021 |
2.0.0-preview4 | 218 | 11/10/2021 |
2.0.0-preview3 | 290 | 10/27/2021 |
2.0.0-preview2 | 203 | 10/20/2021 |
2.0.0-preview1 | 226 | 9/14/2021 |
1.1.2 | 1,212 | 10/20/2021 |
1.1.1 | 1,388 | 7/12/2021 |
1.1.0 | 7,428 | 5/24/2020 |
1.0.2 | 894 | 4/4/2020 |
1.0.1 | 571 | 3/31/2020 |
1.0.0 | 519 | 3/16/2020 |