File: Tasks\OneDeploy\OneDeploy.WebJob.cs
Web Access
Project: ..\..\..\src\WebSdk\Publish\Tasks\Microsoft.NET.Sdk.Publish.Tasks.csproj (Microsoft.NET.Sdk.Publish.Tasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Microsoft.NET.Sdk.Publish.Tasks.OneDeploy;
 
/// <summary>
/// 'OneDeploy' publish task for WebJobs.
/// </summary>
public partial class OneDeploy
{
    private const string ContinuousWebJobType = "Continuous";
    private const string TriggeredWebJobType = "Triggered";
    private const string ContinuousWebJobApiPath = "continuouswebjobs";
    private const string TriggeredWebJobsApiPath = "triggeredwebjobs";
 
    public string? WebJobName { get; set; }
 
    public string? WebJobType { get; set; }
 
    /// <summary>
    /// Whether the name is a non-empty value and type is either 'Continuous' or 'Triggered'.
    /// </summary>
    private bool IsWebJobProject(string? webjobName, string? webjobType) =>
        !string.IsNullOrEmpty(webjobName) &&
        (string.Equals(ContinuousWebJobType, webjobType, StringComparison.OrdinalIgnoreCase) ||
         string.Equals(TriggeredWebJobType, webjobType, StringComparison.OrdinalIgnoreCase));
 
    private async Task<IHttpResponse?> DeployWebJobAsync(
        IHttpClient httpClient,
        Uri publishUri,
        string? username,
        string? password,
        string? userAgent,
        string? fileToPublish,
        FileStream fileToPublishStream,
        CancellationToken cancellationToken)
    {
        var response = await httpClient.PutRequestAsync(
            publishUri, username, password, DefaultRequestContentType, userAgent, Path.GetFileName(fileToPublish), Encoding.UTF8, fileToPublishStream, cancellationToken);
 
        return response;
    }
 
    private bool GetWebJobPublishUri(string publishUrl, string? webjobName, string? webjobType, out Uri publishUri)
    {
        // action path differs by WebJob type
        var path = string.Equals(ContinuousWebJobType, webjobType, StringComparison.OrdinalIgnoreCase)
            ? ContinuousWebJobApiPath
            : TriggeredWebJobsApiPath;
 
        // Either:
        //   {publishUrl}/api/continuouswebjobs/{WebJobName}
        //   {publishUrl}/api/triggeredwebjobs/{WebJobName}
        publishUri = new UriBuilder(publishUrl)
        {
            Path = $"api/{path}/{webjobName}",
            Port = -1
        }.Uri;
 
        return Uri.TryCreate(publishUri.ToString(), UriKind.Absolute, out _);
    }
}