Skip to content

Commit 5bb632a

Browse files
alrodfabiocav
authored andcommitted
Adding new property for httptrigger invoke url
1 parent 83cdd05 commit 5bb632a

File tree

6 files changed

+36
-11
lines changed

6 files changed

+36
-11
lines changed

src/WebJobs.Script.WebHost/Controllers/FunctionsController.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace Microsoft.Azure.WebJobs.Script.WebHost.Controllers
3131
public class FunctionsController : Controller
3232
{
3333
private readonly IWebFunctionsManager _functionsManager;
34-
private readonly ScriptHostManager _scriptHostManager;
34+
private readonly WebScriptHostManager _scriptHostManager;
3535
private readonly ILogger _logger;
3636
private static readonly Regex FunctionNameValidationRegex = new Regex(@"^[a-z][a-z0-9_\-]{0,127}$(?<!^host$)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
3737

@@ -47,15 +47,15 @@ public FunctionsController(IWebFunctionsManager functionsManager, WebScriptHostM
4747
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
4848
public async Task<IActionResult> List()
4949
{
50-
return Ok(await _functionsManager.GetFunctionsMetadata(Request));
50+
return Ok(await _functionsManager.GetFunctionsMetadata(Request, _scriptHostManager.Router));
5151
}
5252

5353
[HttpGet]
5454
[Route("admin/functions/{name}")]
5555
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
5656
public async Task<IActionResult> Get(string name)
5757
{
58-
(var success, var function) = await _functionsManager.TryGetFunction(name, Request);
58+
(var success, var function) = await _functionsManager.TryGetFunction(name, Request, _scriptHostManager.Router);
5959

6060
return success
6161
? Ok(function)

src/WebJobs.Script.WebHost/Extensions/FunctionMetadataExtensions.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.IO;
66
using System.Threading.Tasks;
77
using Microsoft.AspNetCore.Http;
8+
using Microsoft.AspNetCore.Routing;
89
using Microsoft.Azure.WebJobs.Script.Description;
910
using Microsoft.Azure.WebJobs.Script.Management.Models;
1011
using Microsoft.Azure.WebJobs.Script.WebHost.Management;
@@ -21,7 +22,7 @@ public static class FunctionMetadataExtensions
2122
/// <param name="request">Current HttpRequest</param>
2223
/// <param name="config">ScriptHostConfig</param>
2324
/// <returns>Promise of a FunctionMetadataResponse</returns>
24-
public static async Task<FunctionMetadataResponse> ToFunctionMetadataResponse(this FunctionMetadata functionMetadata, HttpRequest request, ScriptHostConfiguration config)
25+
public static async Task<FunctionMetadataResponse> ToFunctionMetadataResponse(this FunctionMetadata functionMetadata, HttpRequest request, ScriptHostConfiguration config, IRouter router = null)
2526
{
2627
var functionPath = Path.Combine(config.RootScriptPath, functionMetadata.Name);
2728
var functionMetadataFilePath = Path.Combine(functionPath, ScriptConstants.FunctionMetadataFileName);
@@ -45,7 +46,8 @@ public static async Task<FunctionMetadataResponse> ToFunctionMetadataResponse(th
4546
// Properties below this comment are not present in the kudu version.
4647
IsDirect = functionMetadata.IsDirect,
4748
IsDisabled = functionMetadata.IsDisabled,
48-
IsProxy = functionMetadata.IsProxy
49+
IsProxy = functionMetadata.IsProxy,
50+
HttpTriggerInvokeUrl = GetFunctionInvokeUrl(functionMetadata.Name, baseUrl, request, router)
4951
};
5052
return response;
5153
}
@@ -124,5 +126,18 @@ private static async Task<string> GetTestData(string testDataPath, ScriptHostCon
124126

125127
private static Uri GetFunctionHref(string functionName, string baseUrl) =>
126128
new Uri($"{baseUrl}/admin/functions/{functionName}");
129+
130+
private static Uri GetFunctionInvokeUrl(string functionName, string baseUrl, HttpRequest request, IRouter router)
131+
{
132+
if (router == null)
133+
{
134+
return null;
135+
}
136+
137+
VirtualPathData path = router.GetVirtualPath(
138+
new VirtualPathContext(request.HttpContext, new RouteValueDictionary(), new RouteValueDictionary(), functionName));
139+
140+
return (path != null) ? new Uri(new Uri(baseUrl), path.VirtualPath) : null;
141+
}
127142
}
128143
}

src/WebJobs.Script.WebHost/Management/IWebFunctionsManager.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44
using System.Collections.Generic;
55
using System.Threading.Tasks;
66
using Microsoft.AspNetCore.Http;
7+
using Microsoft.AspNetCore.Routing;
78
using Microsoft.Azure.WebJobs.Script.Management.Models;
89

910
namespace Microsoft.Azure.WebJobs.Script.WebHost.Management
1011
{
1112
public interface IWebFunctionsManager
1213
{
13-
Task<IEnumerable<FunctionMetadataResponse>> GetFunctionsMetadata(HttpRequest request);
14+
Task<IEnumerable<FunctionMetadataResponse>> GetFunctionsMetadata(HttpRequest request, IRouter router = null);
1415

15-
Task<(bool, FunctionMetadataResponse)> TryGetFunction(string name, HttpRequest request);
16+
Task<(bool, FunctionMetadataResponse)> TryGetFunction(string name, HttpRequest request, IRouter router = null);
1617

1718
Task<(bool, bool, FunctionMetadataResponse)> CreateOrUpdate(string name, FunctionMetadataResponse functionMetadata, HttpRequest request);
1819

src/WebJobs.Script.WebHost/Management/WebFunctionsManager.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Text;
1111
using System.Threading.Tasks;
1212
using Microsoft.AspNetCore.Http;
13+
using Microsoft.AspNetCore.Routing;
1314
using Microsoft.Azure.WebJobs.Script.Description;
1415
using Microsoft.Azure.WebJobs.Script.Management.Models;
1516
using Microsoft.Azure.WebJobs.Script.WebHost.Extensions;
@@ -45,9 +46,9 @@ public WebFunctionsManager(WebHostSettings webSettings, ILoggerFactory loggerFac
4546
/// </summary>
4647
/// <param name="request">Current HttpRequest for figuring out baseUrl</param>
4748
/// <returns>collection of FunctionMetadataResponse</returns>
48-
public async Task<IEnumerable<FunctionMetadataResponse>> GetFunctionsMetadata(HttpRequest request)
49+
public async Task<IEnumerable<FunctionMetadataResponse>> GetFunctionsMetadata(HttpRequest request, IRouter router = null)
4950
{
50-
return await GetFunctionsMetadata().Select(fm => fm.ToFunctionMetadataResponse(request, _config)).WhenAll();
51+
return await GetFunctionsMetadata().Select(fm => fm.ToFunctionMetadataResponse(request, _config, router)).WhenAll();
5152
}
5253

5354
/// <summary>
@@ -129,12 +130,12 @@ await functionMetadata
129130
/// <param name="name">Function name to retrieve</param>
130131
/// <param name="request">Current HttpRequest</param>
131132
/// <returns>(success, FunctionMetadataResponse)</returns>
132-
public async Task<(bool, FunctionMetadataResponse)> TryGetFunction(string name, HttpRequest request)
133+
public async Task<(bool, FunctionMetadataResponse)> TryGetFunction(string name, HttpRequest request, IRouter router = null)
133134
{
134135
var functionMetadata = ScriptHost.ReadFunctionMetadata(Path.Combine(_config.RootScriptPath, name), new Dictionary<string, Collection<string>>(), fileSystem: FileUtility.Instance);
135136
if (functionMetadata != null)
136137
{
137-
return (true, await functionMetadata.ToFunctionMetadataResponse(request, _config));
138+
return (true, await functionMetadata.ToFunctionMetadataResponse(request, _config, router));
138139
}
139140
else
140141
{

src/WebJobs.Script.WebHost/Models/FunctionMetadataResponse.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ public class FunctionMetadataResponse
4646
[JsonProperty(PropertyName = "href")]
4747
public Uri Href { get; set; }
4848

49+
/// <summary>
50+
/// Gets or sets httptrigger invoke url
51+
/// </summary>
52+
[JsonProperty(PropertyName = "httptrigger_invoke_url")]
53+
public Uri HttpTriggerInvokeUrl { get; set; }
54+
4955
/// <summary>
5056
/// Gets or sets function config json
5157
/// </summary>

src/WebJobs.Script.WebHost/WebScriptHostManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ public WebScriptHostManager(ScriptHostConfiguration config,
110110

111111
public ISecretManager SecretManager => _secretManager;
112112

113+
public IWebJobsRouter Router => _router;
114+
113115
/// <summary>
114116
/// Gets or sets a value indicating whether http requests should be
115117
/// temporarily delayed due to host state.

0 commit comments

Comments
 (0)