| File: Tasks\ZipDeploy\DeploymentResponse.cs | Web Access |
| Project: src\sdk\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. using System.Text.Json.Serialization; namespace Microsoft.NET.Sdk.Publish.Tasks.ZipDeploy { public class DeploymentResponse { [JsonPropertyName("id")] public string? Id { get; set; } [JsonPropertyName("status")] public DeployStatus? Status { get; set; } [JsonPropertyName("log_url")] public string? LogUrl { get; set; } } public static class DeploymentResponseExtensions { public static string? GetLogUrlWithId(this DeploymentResponse deploymentResponse) { if (deploymentResponse is null || string.IsNullOrEmpty(deploymentResponse.LogUrl) || string.IsNullOrEmpty(deploymentResponse.Id)) { return deploymentResponse?.LogUrl; } try { Uri logUrl = new(deploymentResponse.LogUrl); string pathAndQuery = logUrl.PathAndQuery; // try to replace '../latest/log' with '../{deploymentResponse.Id}/log' if (!string.IsNullOrEmpty(pathAndQuery)) { string[] pathAndQueryParts = pathAndQuery.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); string?[] pathWithIdParts = new string[pathAndQueryParts.Length]; for (int i = pathAndQueryParts.Length - 1; i >= 0; i--) { if (string.Equals("latest", pathAndQueryParts[i], StringComparison.Ordinal)) { pathWithIdParts[i] = deploymentResponse.Id; continue; } pathWithIdParts[i] = pathAndQueryParts[i].Trim(); } return new UriBuilder() { Scheme = logUrl.Scheme, Host = logUrl.Host, Path = string.Join("/", pathWithIdParts) }.ToString(); } } catch { // do nothing } return deploymentResponse.LogUrl; } } }