diff --git a/src/SDKs/ApiManagement/ApiManagement.Tests/ApiManagement.Tests.csproj b/src/SDKs/ApiManagement/ApiManagement.Tests/ApiManagement.Tests.csproj index ad1b44842d81..e1b6e119badf 100644 --- a/src/SDKs/ApiManagement/ApiManagement.Tests/ApiManagement.Tests.csproj +++ b/src/SDKs/ApiManagement/ApiManagement.Tests/ApiManagement.Tests.csproj @@ -32,9 +32,6 @@ - - - PreserveNewest diff --git a/src/SDKs/ApiManagement/ApiManagement.Tests/ManagementApiTests/IssueTests.cs b/src/SDKs/ApiManagement/ApiManagement.Tests/ManagementApiTests/IssueTests.cs new file mode 100644 index 000000000000..bcb9fee91daa --- /dev/null +++ b/src/SDKs/ApiManagement/ApiManagement.Tests/ManagementApiTests/IssueTests.cs @@ -0,0 +1,306 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// using ApiManagement.Management.Tests; + +using Microsoft.Rest.ClientRuntime.Azure.TestFramework; +using Microsoft.Azure.Management.ApiManagement; +using Xunit; +using System.Linq; +using System.Threading.Tasks; +using System; +using Microsoft.Azure.Management.ApiManagement.Models; +using System.IO; +using System.Net; + +namespace ApiManagement.Tests.ManagementApiTests +{ + public class IssueTests : TestBase + { + [Fact] + public async Task CreateUpdateDelete() + { + Environment.SetEnvironmentVariable("AZURE_TEST_MODE", "Playback"); + + using (MockContext context = MockContext.Start(this.GetType().FullName)) + { + var testBase = new ApiManagementTestBase(context); + testBase.TryCreateApiManagementService(); + + // list all the APIs + var apiListResponse = testBase.client.Api.ListByService( + testBase.rgName, + testBase.serviceName, + null); + Assert.NotNull(apiListResponse); + Assert.Single(apiListResponse); + Assert.NotNull(apiListResponse.NextPageLink); + + // find the echo api + var echoApi = apiListResponse.First(); + + // list users + var listUsersResponse = testBase.client.User.ListByService( + testBase.rgName, + testBase.serviceName, + null); + + Assert.NotNull(listUsersResponse); + Assert.Single(listUsersResponse); + + var adminUser = listUsersResponse.First(); + + // there should be now issues initially + var issuesList = testBase.client.ApiIssue.ListByService( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + null); + Assert.NotNull(issuesList); + Assert.Empty(issuesList); + + string newissueId = TestUtilities.GenerateName("newIssue"); + string newcommentId = TestUtilities.GenerateName("newComment"); + string newattachmentId = TestUtilities.GenerateName("newattachment"); + const string attachmentPath = "./Resources/apiissueattachment.JPG"; + + try + { + // add a recipient to the notification + var issueContract = new IssueContract() + { + Title = TestUtilities.GenerateName("title"), + Description = TestUtilities.GenerateName("description"), + UserId = adminUser.Id, + ApiId = echoApi.Id, + CreatedDate = DateTime.UtcNow + }; + var apiIssueContract = await testBase.client.ApiIssue.CreateOrUpdateAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + issueContract); + + Assert.NotNull(apiIssueContract); + Assert.Equal(echoApi.Id, apiIssueContract.ApiId); + Assert.Equal(State.Proposed, apiIssueContract.State); + Assert.Equal(issueContract.Title, apiIssueContract.Title); + // get the issue + var issueData = await testBase.client.ApiIssue.GetAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId); + Assert.NotNull(issueData); + Assert.Equal(issueData.Name, newissueId); + Assert.Equal(adminUser.Id, issueData.UserId); + + // get commments on issue. there should be none initially + var emptyCommentList = await testBase.client.ApiIssueComment.ListByServiceAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + null); + + Assert.Empty(emptyCommentList); + + // add a comment + var issueCommentParameters = new IssueCommentContract() + { + Text = TestUtilities.GenerateName("issuecommenttext"), + UserId = adminUser.Id, + CreatedDate = DateTime.UtcNow + }; + var addedComment = await testBase.client.ApiIssueComment.CreateOrUpdateAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newcommentId, + issueCommentParameters); + Assert.NotNull(addedComment); + Assert.Equal(addedComment.Name, newcommentId); + //Assert.Equal(addedComment.UserId, adminUser.Id); Bug userId is not getting populated + Assert.NotNull(addedComment.CreatedDate); + + // get the comment tag. + var commentEntityTag = await testBase.client.ApiIssueComment.GetEntityTagAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newcommentId); + Assert.NotNull(commentEntityTag); + Assert.NotNull(commentEntityTag.ETag); + + // delete the commment + await testBase.client.ApiIssueComment.DeleteAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newcommentId, + commentEntityTag.ETag); + + try + { + + // get the apicomment + var getComment = await testBase.client.ApiIssueComment.GetAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newcommentId); + + // should not come here + throw new Exception("This code should not have been executed."); + } + catch (ErrorResponseException ex) + { + Assert.Equal(HttpStatusCode.NotFound, ex.Response.StatusCode); + } + + // get the issue attachments + var apiIssueAttachments = await testBase.client.ApiIssueAttachment.ListByServiceAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + null); + Assert.Empty(apiIssueAttachments); + + // add an attachment to the issue + FileInfo fileInfo = new FileInfo(attachmentPath); + + // The byte[] to save the data in + byte[] data = new byte[fileInfo.Length]; + + // Load a filestream and put its content into the byte[] + using (FileStream fs = fileInfo.OpenRead()) + { + fs.Read(data, 0, data.Length); + } + + var content = Convert.ToBase64String(data); + var issueAttachmentContract = new IssueAttachmentContract() + { + Content = content, + ContentFormat = "image/jpeg", + Title = TestUtilities.GenerateName("attachment") + }; + var issueAttachment = await testBase.client.ApiIssueAttachment.CreateOrUpdateAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newattachmentId, + issueAttachmentContract); + Assert.NotNull(issueAttachment); + Assert.Equal(newattachmentId, issueAttachment.Name); + Assert.Equal("link", issueAttachment.ContentFormat); + Assert.NotNull(issueAttachment.Content); + + // get the attachment tag + var issueAttachmentTag = await testBase.client.ApiIssueAttachment.GetEntityTagAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newattachmentId); + Assert.NotNull(issueAttachmentTag); + Assert.NotNull(issueAttachmentTag.ETag); + + // delete the attachment + await testBase.client.ApiIssueAttachment.DeleteAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newattachmentId, + issueAttachmentTag.ETag); + + try + { + var issueattachment = await testBase.client.ApiIssueAttachment.GetAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newattachmentId); + + // it should not reach here. + throw new Exception("This code should not have been executed."); + } + catch (ErrorResponseException ex) + { + Assert.Equal(HttpStatusCode.NotFound, ex.Response.StatusCode); + } + + // get the issue tag + var apiIssuetag = await testBase.client.ApiIssue.GetEntityTagAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId); + Assert.NotNull(apiIssuetag); + + // delete the issue + await testBase.client.ApiIssue.DeleteAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + apiIssuetag.ETag); + + // check the issue exist + try + { + var apiIssue = await testBase.client.ApiIssue.GetAsync( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId); + + // it should not reach here. + throw new Exception("This code should not have been executed."); + } + catch (ErrorResponseException ex) + { + Assert.Equal(HttpStatusCode.NotFound, ex.Response.StatusCode); + } + } + finally + { + // cleanup the api issue attachment, if exists + testBase.client.ApiIssueAttachment.Delete( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newattachmentId, + "*"); + + // cleanup the api issue comment if exists + testBase.client.ApiIssueComment.Delete( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + newcommentId, + "*"); + + // cleanup the api issue if exists + testBase.client.ApiIssue.Delete( + testBase.rgName, + testBase.serviceName, + echoApi.Name, + newissueId, + "*"); + } + } + } + } +} diff --git a/src/SDKs/ApiManagement/ApiManagement.Tests/Resources/apiissueattachment.JPG b/src/SDKs/ApiManagement/ApiManagement.Tests/Resources/apiissueattachment.JPG new file mode 100644 index 000000000000..d423c9e0505c Binary files /dev/null and b/src/SDKs/ApiManagement/ApiManagement.Tests/Resources/apiissueattachment.JPG differ diff --git a/src/SDKs/ApiManagement/ApiManagement.Tests/SessionRecords/ApiManagement.Tests.ManagementApiTests.IssueTests/CreateUpdateDelete.json b/src/SDKs/ApiManagement/ApiManagement.Tests/SessionRecords/ApiManagement.Tests.ManagementApiTests.IssueTests/CreateUpdateDelete.json new file mode 100644 index 000000000000..f4b9356c8e19 --- /dev/null +++ b/src/SDKs/ApiManagement/ApiManagement.Tests/SessionRecords/ApiManagement.Tests.ManagementApiTests.IssueTests/CreateUpdateDelete.json @@ -0,0 +1,1485 @@ +{ + "Entries": [ + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZT9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"publisherEmail\": \"apim@autorestsdk.com\",\r\n \"publisherName\": \"autorestsdk\"\r\n },\r\n \"sku\": {\r\n \"name\": \"Developer\",\r\n \"capacity\": 1\r\n },\r\n \"location\": \"CentralUS\",\r\n \"tags\": {\r\n \"tag1\": \"value1\",\r\n \"tag2\": \"value2\",\r\n \"tag3\": \"value3\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "289" + ], + "x-ms-client-request-id": [ + "4fb74cee-e310-4d81-a2b4-19a417ae8fa0" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice\",\r\n \"name\": \"sdktestservice\",\r\n \"type\": \"Microsoft.ApiManagement/service\",\r\n \"tags\": {\r\n \"tag1\": \"value1\",\r\n \"tag2\": \"value2\",\r\n \"tag3\": \"value3\"\r\n },\r\n \"location\": \"Central US\",\r\n \"etag\": \"AAAAAADqqK8=\",\r\n \"properties\": {\r\n \"publisherEmail\": \"apim@autorestsdk.com\",\r\n \"publisherName\": \"autorestsdk\",\r\n \"notificationSenderEmail\": \"apimgmt-noreply@mail.windowsazure.com\",\r\n \"provisioningState\": \"Succeeded\",\r\n \"targetProvisioningState\": \"\",\r\n \"createdAtUtc\": \"2017-06-16T19:08:53.4371217Z\",\r\n \"gatewayUrl\": \"https://sdktestservice.azure-api.net\",\r\n \"gatewayRegionalUrl\": \"https://sdktestservice-centralus-01.regional.azure-api.net\",\r\n \"portalUrl\": \"https://sdktestservice.portal.azure-api.net\",\r\n \"managementApiUrl\": \"https://sdktestservice.management.azure-api.net\",\r\n \"scmUrl\": \"https://sdktestservice.scm.azure-api.net\",\r\n \"hostnameConfigurations\": [],\r\n \"publicIPAddresses\": [\r\n \"52.173.33.36\"\r\n ],\r\n \"privateIPAddresses\": null,\r\n \"additionalLocations\": null,\r\n \"virtualNetworkConfiguration\": null,\r\n \"customProperties\": {\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Ssl30\": \"False\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30\": \"False\"\r\n },\r\n \"virtualNetworkType\": \"None\",\r\n \"certificates\": null\r\n },\r\n \"sku\": {\r\n \"name\": \"Developer\",\r\n \"capacity\": 1\r\n },\r\n \"identity\": null\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:38 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "ETag": [ + "\"AAAAAADqqK8=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "e296b0bb-ba7e-48e4-ba88-2a2108b1ee15", + "41f2b685-7426-4d4f-b833-ac128c886d74" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "17f9a96b-3bd3-4cb6-91ab-b8bf23f3f59d" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171539Z:17f9a96b-3bd3-4cb6-91ab-b8bf23f3f59d" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZT9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "16d2e21b-8746-4e8b-a05d-b012ae35d2fc" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice\",\r\n \"name\": \"sdktestservice\",\r\n \"type\": \"Microsoft.ApiManagement/service\",\r\n \"tags\": {\r\n \"tag1\": \"value1\",\r\n \"tag2\": \"value2\",\r\n \"tag3\": \"value3\"\r\n },\r\n \"location\": \"Central US\",\r\n \"etag\": \"AAAAAADqqK8=\",\r\n \"properties\": {\r\n \"publisherEmail\": \"apim@autorestsdk.com\",\r\n \"publisherName\": \"autorestsdk\",\r\n \"notificationSenderEmail\": \"apimgmt-noreply@mail.windowsazure.com\",\r\n \"provisioningState\": \"Succeeded\",\r\n \"targetProvisioningState\": \"\",\r\n \"createdAtUtc\": \"2017-06-16T19:08:53.4371217Z\",\r\n \"gatewayUrl\": \"https://sdktestservice.azure-api.net\",\r\n \"gatewayRegionalUrl\": \"https://sdktestservice-centralus-01.regional.azure-api.net\",\r\n \"portalUrl\": \"https://sdktestservice.portal.azure-api.net\",\r\n \"managementApiUrl\": \"https://sdktestservice.management.azure-api.net\",\r\n \"scmUrl\": \"https://sdktestservice.scm.azure-api.net\",\r\n \"hostnameConfigurations\": [],\r\n \"publicIPAddresses\": [\r\n \"52.173.33.36\"\r\n ],\r\n \"privateIPAddresses\": null,\r\n \"additionalLocations\": null,\r\n \"virtualNetworkConfiguration\": null,\r\n \"customProperties\": {\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Ssl30\": \"False\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11\": \"True\",\r\n \"Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30\": \"False\"\r\n },\r\n \"virtualNetworkType\": \"None\",\r\n \"certificates\": null\r\n },\r\n \"sku\": {\r\n \"name\": \"Developer\",\r\n \"capacity\": 1\r\n },\r\n \"identity\": null\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:39 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "ETag": [ + "\"AAAAAADqqK8=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "bce3eaa2-56b8-4a1e-ac28-ac316c4daf67" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "98945157-8cb1-4ff5-8386-35ad47a49c0c" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171540Z:98945157-8cb1-4ff5-8386-35ad47a49c0c" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis?api-version=2018-01-01&expandApiVersionSet=false", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzP2FwaS12ZXJzaW9uPTIwMTgtMDEtMDEmZXhwYW5kQXBpVmVyc2lvblNldD1mYWxzZQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "be79d8c9-cc05-44bb-8a22-255cf619aaf9" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api\",\r\n \"type\": \"Microsoft.ApiManagement/service/apis\",\r\n \"name\": \"echo-api\",\r\n \"properties\": {\r\n \"displayName\": \"Echo API\",\r\n \"apiRevision\": \"1\",\r\n \"description\": null,\r\n \"serviceUrl\": \"http://echoapi.cloudapp.net/api\",\r\n \"path\": \"echo\",\r\n \"protocols\": [\r\n \"https\"\r\n ],\r\n \"authenticationSettings\": null,\r\n \"subscriptionKeyParameterNames\": null,\r\n \"isCurrent\": true\r\n }\r\n }\r\n ],\r\n \"nextLink\": \"\"\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:39 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "759dbe20-d721-46fd-a5a4-b08bdc989035" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-correlation-request-id": [ + "380da7ce-9931-4118-9e05-24d382281f21" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171540Z:380da7ce-9931-4118-9e05-24d382281f21" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/users?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS91c2Vycz9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "12a443e6-993b-4a4e-ab2f-6a05b619b493" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/users/1\",\r\n \"type\": \"Microsoft.ApiManagement/service/users\",\r\n \"name\": \"1\",\r\n \"properties\": {\r\n \"firstName\": \"Administrator\",\r\n \"lastName\": \"\",\r\n \"email\": \"apim@autorestsdk.com\",\r\n \"state\": \"active\",\r\n \"registrationDate\": \"2017-06-16T19:12:43.183Z\",\r\n \"note\": null,\r\n \"identities\": [\r\n {\r\n \"provider\": \"Azure\",\r\n \"id\": \"apim@autorestsdk.com\"\r\n }\r\n ]\r\n }\r\n }\r\n ],\r\n \"nextLink\": \"\"\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:40 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "898ebc5a-9645-4bed-b3a2-e7f9719c220a" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "e215b049-c432-48db-823d-92ba1ec6fbb3" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171541Z:e215b049-c432-48db-823d-92ba1ec6fbb3" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcz9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "12baaf65-925b-4494-b8af-92305afe7aa5" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [],\r\n \"nextLink\": \"\"\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:40 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "fc6c86c4-6133-4af9-aa97-affc9892cdcf" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14996" + ], + "x-ms-correlation-request-id": [ + "c932366c-d956-4ae2-916f-72d421472349" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171541Z:c932366c-d956-4ae2-916f-72d421472349" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOD9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"title\": \"title4611\",\r\n \"description\": \"description5033\",\r\n \"createdDate\": \"2018-04-19T17:15:41.5638066Z\",\r\n \"userId\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/users/1\",\r\n \"apiId\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "494" + ], + "x-ms-client-request-id": [ + "84725ef3-5d2c-4822-abd5-f9a2fa9a2d10" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628\",\r\n \"type\": \"Microsoft.ApiManagement/service/apis/issues\",\r\n \"name\": \"newIssue628\",\r\n \"properties\": {\r\n \"title\": \"title4611\",\r\n \"description\": \"description5033\",\r\n \"createdDate\": \"2018-04-19T17:15:41.5638066Z\",\r\n \"state\": \"proposed\",\r\n \"apiId\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api\",\r\n \"comments\": [],\r\n \"attachments\": []\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "668" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:41 GMT" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"AAAAAAAAE6s=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "62b9556e-85a4-4e8d-9bbe-3a8211382271" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "8565b0db-1e1e-4bd9-ab53-1329a6b536be" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171542Z:8565b0db-1e1e-4bd9-ab53-1329a6b536be" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOD9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "4deccf65-fcbb-40e3-a607-fd3a25464f92" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628\",\r\n \"type\": \"Microsoft.ApiManagement/service/apis/issues\",\r\n \"name\": \"newIssue628\",\r\n \"properties\": {\r\n \"title\": \"title4611\",\r\n \"description\": \"description5033\",\r\n \"createdDate\": \"2018-04-19T17:15:41.563Z\",\r\n \"state\": \"proposed\",\r\n \"userId\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/users/1\",\r\n \"apiId\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:15:55 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "ETag": [ + "\"AAAAAAAAE6s=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "b02ff6d9-695b-4c5a-a47e-2898642bf1ea" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14995" + ], + "x-ms-correlation-request-id": [ + "e6ab5699-8598-4f0c-a23a-38bc1a5c63d7" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171555Z:e6ab5699-8598-4f0c-a23a-38bc1a5c63d7" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOD9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "3e6102f9-7238-4a19-94f3-63e3534b6f6c" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"error\": {\r\n \"code\": \"ResourceNotFound\",\r\n \"message\": \"Issue not found.\",\r\n \"details\": null\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "81" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:18:00 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "59eccbd3-d54b-439b-baa8-1d33af8f4301" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14987" + ], + "x-ms-correlation-request-id": [ + "bbbc20f0-b02b-4bbd-8932-864f3fdcbabb" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171800Z:bbbc20f0-b02b-4bbd-8932-864f3fdcbabb" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 404 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9jb21tZW50cz9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "75e30abc-0ccb-4545-9f5d-ac500e289d94" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [],\r\n \"nextLink\": \"\"\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:16:18 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "671ba081-99b9-4a54-b835-8156c2c34d75" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14994" + ], + "x-ms-correlation-request-id": [ + "dc795d1b-1bf2-4a0d-9f1e-196d9767c182" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171618Z:dc795d1b-1bf2-4a0d-9f1e-196d9767c182" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments/newComment3514?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9jb21tZW50cy9uZXdDb21tZW50MzUxND9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"text\": \"issuecommenttext4333\",\r\n \"createdDate\": \"2018-04-19T17:16:22.1513207Z\",\r\n \"userId\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/users/1\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "288" + ], + "x-ms-client-request-id": [ + "8a970936-ff3d-43be-97d8-6abfac63b0d9" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments/newComment3514\",\r\n \"type\": \"Microsoft.ApiManagement/service/apis/issues/comments\",\r\n \"name\": \"newComment3514\",\r\n \"properties\": {\r\n \"text\": \"issuecommenttext4333\",\r\n \"createdDate\": \"2018-04-19T17:16:22.1513207Z\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "427" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:16:23 GMT" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"AAAAAAAAE6s=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "c31bc8fb-c182-474e-bbe1-7a826a19ce06" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "80c643df-2554-4906-8895-6a1be4a8afce" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171624Z:80c643df-2554-4906-8895-6a1be4a8afce" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments/newComment3514?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9jb21tZW50cy9uZXdDb21tZW50MzUxND9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "HEAD", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "349df768-3337-4300-b312-0a0408c9ea71" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:16:57 GMT" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"AAAAAAAAE6w=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "809284f4-3c96-4380-9886-82352c6bab24" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14993" + ], + "x-ms-correlation-request-id": [ + "96b72e1b-a060-484a-991d-db56e16493b8" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171658Z:96b72e1b-a060-484a-991d-db56e16493b8" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments/newComment3514?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9jb21tZW50cy9uZXdDb21tZW50MzUxND9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "f93d77dc-246f-460a-94ec-d2c421171594" + ], + "If-Match": [ + "\"AAAAAAAAE6w=\"" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:02 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "fc4cd840-ac01-48a1-badc-d1f15bc7da2f" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1196" + ], + "x-ms-correlation-request-id": [ + "fb10a204-9ed7-494f-b96d-4209755e4c54" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171702Z:fb10a204-9ed7-494f-b96d-4209755e4c54" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments/newComment3514?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9jb21tZW50cy9uZXdDb21tZW50MzUxND9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "90c3d64a-7e24-40ba-baea-db92a9b371f7" + ], + "If-Match": [ + "*" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:18:06 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "533601e0-5da9-4213-9581-f68ac79f927d" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1191" + ], + "x-ms-correlation-request-id": [ + "73d497b2-a0ed-40c6-802c-5d57d03716b5" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171806Z:73d497b2-a0ed-40c6-802c-5d57d03716b5" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/comments/newComment3514?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9jb21tZW50cy9uZXdDb21tZW50MzUxND9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "2d1a5e38-720d-4df1-937a-c91a82b21079" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"error\": {\r\n \"code\": \"ResourceNotFound\",\r\n \"message\": \"Issue-comment not found.\",\r\n \"details\": null\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "89" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:05 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "127c2965-7294-40d5-bdd6-a9c896c10e89" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14992" + ], + "x-ms-correlation-request-id": [ + "9e616d47-a659-4263-a566-614fc0046052" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171705Z:9e616d47-a659-4263-a566-614fc0046052" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 404 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9hdHRhY2htZW50cz9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "8bfcf625-1694-425c-a74a-e482056f40d1" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"value\": [],\r\n \"nextLink\": \"\"\r\n}", + "ResponseHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:18 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Transfer-Encoding": [ + "chunked" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Vary": [ + "Accept-Encoding" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "67fc1e88-9863-4f6e-852b-7325e20adc26" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14991" + ], + "x-ms-correlation-request-id": [ + "7cdaa0a3-feec-4da7-adf6-4c22c1b611c8" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171719Z:7cdaa0a3-feec-4da7-adf6-4c22c1b611c8" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments/newattachment691?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9hdHRhY2htZW50cy9uZXdhdHRhY2htZW50NjkxP2FwaS12ZXJzaW9uPTIwMTgtMDEtMDE=", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"title\": \"attachment1106\",\r\n \"contentFormat\": \"image/jpeg\",\r\n \"content\": \"/9j/4AAQSkZJRgABAQEAkACQAAD/4RCcRXhpZgAATU0AKgAAAAgABAE7AAIAAAAOAAAISodpAAQAAAABAAAIWJydAAEAAAAcAAAQeOocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNhbWlyIFNvbGFua2kAAAHqHAAHAAAIDAAACGoAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAYQBtAGkAcgAgAFMAbwBsAGEAbgBrAGkAAAD/4QpmaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIvPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj48ZGM6Y3JlYXRvcj48cmRmOlNlcSB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6bGk+U2FtaXIgU29sYW5raTwvcmRmOmxpPjwvcmRmOlNlcT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCALdBZMDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6RooooAKKqzTT/axDAI/ubyXz647Uf6f/ANO//j1AFqiqv+n/APTv/wCPUf6f/wBO/wD49QBaoqr/AKf/ANO//j1H+n/9O/8A49QBaoqr/p//AE7/APj1H+n/APTv/wCPUAWqKq/6f/07/wDj1H+n/wDTv/49QBaoqr/p/wD07/8Aj1H+n/8ATv8A+PUAWqKq/wCn/wDTv/49R/p//Tv/AOPUAWqKq/6f/wBO/wD49R/p/wD07/8Aj1AFqiqv+n/9O/8A49T7SaSZJPNChkcp8vTigCeiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKv/MW/7Yf+zVaqr/zFv+2H/s1WqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqrZf8vH/AF3arVVbL/l4/wCu7UAWqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAq/8AMW/7Yf8As1Wqq/8AMW/7Yf8As1WqACsTxHr11o8unwafpy6hcX8zRJG1x5IGELZztPYVt1yPjU3o1jw0dKW3a7+2yeWLlmWM/uXzkqCeme1IO5oaR4iurrV30rWdKbTL7yTPEonE0csYIBIYAcgkZBFb1cd4ekur7xhezeITHDq9jB5MVrCpEQhY58xWJy+SAM4GMYxXOafpupeKtHk1WXQ7a6vbp5DFfvqjxy25DsFCKIzs246A84560+iDqz1SiuE1nSNTlOlXevaadetYLIR3llBIMrPxmZUOBJ3GOozxUOrLpupab4Pj0SaS30+TUdkZVmV0Xy5AyZPIPVfUdqdvzt+Nhefkeg0Vxd1pFj4Z8WaFJoMX2Q38729zBGx2zJ5bNuIz1UgfN155qPQdB07xbY3Wq+IYft11NdTRqJHb/RkRyqogB+XAXORzk0v6/r7x7f16/wCR3FFeYzvc33hXTrOe8mc23iQWcV1uzI0aSMFbd6gcZ9q2J9KsvDfj7QTo0JtV1ETw3SK5ImCx71ZgTywI69eaFrr/AFsn+oPTT+t3/kdtRXngsLTR9eafxfpcs8suoeZa60shdUy+Y0bB3RgcLjG00l3Bd+JPFesx3OiWurwWEqW8MV1ftCsIKBiwQIwJJJ+brwAOlC1X9eX+Y+p6JRWJ4TstT0/Qha6wV8yOVxEBOZisWcopcgFiBxnHatumIKq2X/Lx/wBd2q1VWy/5eP8Aru1IC1RRRQA2QssTtGm9wpKrnG4+me1Yh1rVRfizOjJ5zRmUD7YMbQcddvqa3ayH/wCRyi/68G/9DFb0eXXmjfTz/RnPX5rJxk1qu3V+aZpwPI9ujTxiKQjLIG3bT6Z71JXP6lYx6j4rht5y3kmyYyKrFd43jjI5xnH5U29trO4vfsdvpb37WkSRlXm2xxAjgcnk474J6VSoxdtd9fT72S60ldW209Xa+yR0VFcja3U8ugadZtM8YnvGt3kDksEBb5Q34AZrS1K0ttB0S8utKgWCYRbdyk+uM/UZzmnLD8suRvVuy++wo4nmjzpaJXf9f8MblFcvFpF5FNbTWenRW0qSK0lwLwu0i5+YN8vOa6isqlNQtZ3/AK8mzWlUlUvdW+/9UgooorI2CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKv8AzFv+2H/s1Wqq/wDMW/7Yf+zVaoAKo32kwahfafdzPIslhK0sQQgBiVK88dME9MVeooAzr3RLa91ix1MvLDdWe4K8TAeYjdUfIOV7+x6Gs1/BdoLq4ksdS1PT4bpzJNa2lwEjdj1I4JUnvtIro6KAMjUPD/22eOSDVtT08JEIvLtJwFZR6hlbn3GD71z/AIk0Kwt18K6RDGyWg1EgYkO/PlSNu3Zzu3c565rt6KAMXTvC9vY6oNRuL291K7RDHFLeyhvJU9QoUADOOTjJ9ahuPB9tJe3FxY6jqWm/am33EVlOESVu7YKnax7lcGugooAyH8MacdO0+xgR7e30+4S4hSJurKSfmJyTkkk9z61Pe6Nb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wj/74FH2aD/nhH/3wKAD7TB/z3j/AO+xR9pg/wCe8f8A32KPs0H/ADwj/wC+BR9mg/54R/8AfAoAPtMH/PeP/vsUfaYP+e8f/fYo+zQf88I/++BR9mg/54R/98CgA+0wf894/wDvsUfaYP8AnvH/AN9ij7NB/wA8I/8AvgUfZoP+eEf/AHwKAD7TB/z3j/77FH2mD/nvH/32KPs0H/PCP/vgUfZoP+eEf/fAoAPtMH/PeP8A77FPSWOTPlur467TnFM+zQf88I/++BT0ijjz5aKmeu0YzQA6iiigAooooAKKrX2pWOlwCfU7y3s4i20SXEqxqT6ZJHPBqKw1zSdUkaPTNUsrx1GWW3uEkIHuATQBeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMDxOAb7w8CMj+1V/9Ey1D4ytrdbG0uoY0XU47yFbKRF/ebjIAyg9SCu7I6Yz6UvjC2jvJNBt5jIEk1RQTFK0bf6qXoykEfgarnTLfw34qsrv95PaXubUSXczTvaykZXa7ksFfBUjPXb60R/X9EOX6fqzb1TVvsMsFrbW7Xl9c58qBWC8D7zsx+6oyOeeSAATUFprF2upxWGtWEdnNcKxt5ILjzo5CoyV3FVIbHOCORnB4rN1O0nm8fw7NVudO8/TtkLQJE29lkJdf3iNzhlOBjp7VdHh6VtQsri/1+/vPssxliilS3VS21l/gjUnhjxmhbJifYG1vUbue5/sTSobuC2laF5Z7vyS7r94IAjZw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w30ZdUcOjI7IyMOjKykFTyeQe9QXPh/Try2t4biKQ/ZhiGVbiRZU9cSBg/PfnnvWlRQBnWugabZXEM9tbbZoQ4WQuzMd+3cWJOWJ2ry2TxTptEsZ9UTUHjkW6UKC8czxhwpyodVID4zxuBq/RQBm32gadqN2Lq4ilS4C7DLb3EkDMvZWKMCw9jmpLTRdOsWma0tEi86NY5AudrKucDHT+I/XPNXqKOlgMi08L6TZTxywwSsYTmJZrmWVIj6ojsVU/QCteiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopGZUQu5CqoySTgAVz/AIa8XW/iSz1G7SA21tZXDRrJI3+sQKGEmMDAIOcc8UAdDRXIjxvcpbQapdaHLBoVw6ql6Z1LqrEBZGixwpJHOScHpXTahf2+madPfXb7IIELu3sPT3oeiuw3dixRWR4W14+JfDlvqrWrWhmZwYWfcU2uV5OB6elU/Fvi5PCjae0tk9zFdSssro+DCijcz4wd2Bk446UPR6hudHRWVr2upo3he61qKMXccEIlVFk2iQHGMNg+vpUeseI4dJgtFFtNd318dtrZwYLyHGTycAKO7HgUAbNFcq3i3UtNaOTxP4efTbKRghu4btbhYiTgeYAAVHvyKk8T+I9Y0CG5vLbQYr3T7eLzHuDfiNvf5Nh/nRsG501FY+iajrN+znV9Fi06LYGjdL0T7ye2AoxUfiTX7vRpdOg07TV1C5v5mhSNrjyQMIWznaewoegLU3KKx7HVtQWyu7rxJpsOkQ267963gnBUAlicKMYxWZH4q12+hF5pXhOaewcbo5J7xIZZV/vLGQevUZIzQB1dFc1d+NLWLwVdeIbO3kmFr8slrKfKkRwwVkbg7SM+9dBPP5FlJcbd3lxl9ucZwM4oeiuxpXJaK5HVPHR07wbpOvLpb3H9otGDbRy/MgdCxwdvzEBemBn2rcudagj8MTa3Z4uoEtGuowGwJAFLAZ7ZxQ9L36CWrSXU0qK5rUfFdzbaHot7Y6Wt3cas8aR27XPlhC6F/v7TnGMdBUR8Xahps0X/AAlGgSaZayusYvIbpbiJGJwN+ACozgZxjmnZ3t8hX0udVRRRSGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE+NvEFompW+gX0k9tZTJ5t7PHbySb488QrsBwWwcnsue5rBtNbsL/RfHVppTyeZMJpoE+zyIPLECL3UAdMYPPtXqlULDRrbT59QliMkh1Cfz5lkIIB2hcDjphR1zSto13T/T+v8Ahx31T7M53xM8LfB64MRBifTYxF75ChQPxIrP1XxLp8niSDTdcluILLSxHJIgtJZPtVwBkcopGxOvPVsdhW5beBtOtpYV+138tjbyiWDT5Z90ETA5GBjcQDyASQPSulqm7y5v6/r/AIBKVoqJxnww1Wzv/C32a1kdpbeeZpA0TqAHmcrgkAHj06d8Va8TRpL4v8KxyKHR57lWVhkEGBuK2tG0iDQ9MWxtHkeJXdwZSC2XcuegHdjRe6RBfanp19M8iy6e7vEFI2sWQod3Hoe2KWhXV/M898RSP4e8J694Wu2Jt/srT6VIx+9DuG6LPqhP/fJHpXRKyxfE3Tjc8LNozJak9C4kBcD327fwFa3ifwtp/izSxZan5qKr70lgYK6HocEg8EEgjFT6toFhrVhFa3yP+4IaGaNykkTAYDKw5BoW9/62f+f9XE9dP66f5FTxtJBF4F1k3RXY1nIoz3YqQo+uSKzvFEcsPwjvI7nPnJpgWTPXcFGf1q3beCrSO8huNR1LVNXNu4eGO/ud6RuOjbVABI9TmtbWNLh1rR7rTbppEhuozG7RkBgD6ZBH6Uuj8/6/UafvJ9v+B/kWLX/jzh/65r/KuU8bi+Os+GRpTW63f22TyzcqzRj9y+chSD0z3rro0EcaovRQAM1Tv9Ig1C/0+7meRZNPlaWIIQAxKFfm46YJ6Yqnq7kx0jby/Q5XxYmu/wDCvtU/t57GYq0TsLCN1BhEil87ic8A/hXawyRywRyQMrROoZGXoQRxildFljaORQ6MCGVhkEHsa5geA7SHMVjrGtWNlniyt70rEo7gZBZR7AikM5jXE+0eGviBNa827XSbSOhZEj8wj8Rz9K9C1CaMeHrmYuPL+yu2/PGNhOaW20bT7PRhpVvaRpYiMx+RjIKnqDnrnJyT1rBX4fWAjFs+qaxLpy8DTpLwmHb2TpuK+xak1ePL5fpYadmn5sxghTwV4BV1wfttnkH/AK5NRq2fCtnrmhv8ul6lZXM+mt2ik8tjJD9OrL+IrtNR0W11IWAlLxrYXKXMKxYA3KCADx056DFM8Q6BZeJdHk07UQ4ichleIgPGw6MpwcH/ABpzfMnbq3+Ngjo15Jfg2ctN/wAgHwF/19W3/ohq2vH0sEfgPVluAG823aKNO7yNwgHvuIqTUPCVrf6NpunC9vbVdNZGt57eRVkBRCoJJUjofSm2Pg6zt76K8v73UNXuIG3QNqFx5ghPqqgBQffGacrSb83/AJExvGz7L/M2bBJItOto5+ZViVX/AN4AZqeiihu7uCVlYKKKKQwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigClqmr2ejwxS37yKJpBFGIoXlZ3IJwFQE9Ae3aq1p4n0q8vks0mmhuZATHFdWstu0mOu3zFXd+GareJyBfeHiTgf2qv/omWovF8sF1ZW2nQMsmozXUL20akF0KyKzSewVQcn8O9C1++35f5g9Pu/wAzpKKytU1O5ivrfTdLijlvp1aQtMSI4YxgF2xyeSAFGM+owTUEGoapYatbWWtm0nS8LLBc2sbRASBS2xkZm6qCQQexGKNwNyiuej1DWtWmu30eSwtre1ne3C3ULyPKyHDHKuuwZ4HDcc+1S6vrV3p2qaXZQW0c8t8soCZIG9Qp+92UAsScE8cc8EDrY3KK5281HW9EC3mqNYXWn71Wf7NC8UlurEDfyzBwM8/d459qt6jql3/aaaXo8UMl2Y/OllnJ8u3jzgEgcsSQcKCOh5GOQDXorBOo6tpN3bLrhs7m1uZVhFzaxtEYnbhQyMzZBPGQ3UjjvTb3WdS/4Sp9F02CBmNolwJpg22LLurFsH5vurhRjOTzR6AdBRWJZahqdvriaXrX2WUzwtNb3NrG0attIDIyMzYI3Ag7jnnpioYdQ1vV2uZ9HfT7e2gnkgRLqF5HlZGKsSVZQgyDjhuOfagDoaKydS1O6ivLbTdNhikv7hDIxlJ8uCMYBdscnkgADGfUYJqGDUNUsNWtrLWzaTpeFlgubWNogJApbYyMzdVBIIPYjFAG5VWxv4tQjmeFXUQzvA28AZZDgke1Wqw/DhZbHUii7mGo3JC5xk+YeM0uvy/VD6fP/M3KZJNHEUEsiIZG2IGYDc3oPU8Gufvr7xHpmny6pdjTXt7dDLNZxJJvVBy22UtgkDn7gz0461U8WjU59R0CTT7uzSB79PKEtszkP5Uh3EiQZXHbAOe/an1Qun3nXUVjXeo39lHZ2Ci3vNWui20qrRRKq/ekIJYgAFRjJJJHTPEa6hq2mahaw621ncW15J5KT2sTRGKTBKhlZmyDgjII5wMc5oA3aK506xq154g1HSdNitozaGMm6nRmVFZAQNoI3sTngFcAc9s2tK1G+OqXOlawsBuYYlnjntlKpNGxI+6SSpBHIyeo5oWobGxRWCmoatrEkr6J9jtbOKRo1ubuJpTOynDFUVlwoIIyW5weMYJkGpahZ6vp1nqgtil5HInmwBgPOX5lHJ4DIGOOxU8mgDaorN1HUZoNU06ws1jaW6kZpN4J2QoMs3B65KqPdq0qACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5vxfa297LoNveQR3EEmqKHilQMrDypeoPBqGfT7PwlrVrf6XaxWen3jra3sUEYRFYn91JgcD5vlPruGeldNLBDO0bTRJIYn3xl1B2NgjI9DgkZ96J7eG6geC6hjmicYaORQysPcHrQtPv/yB6/d/mctrdjaf8JrbXGqXF1bW91aC2ilhvJLdRKrlgjFGHLBjjP8AdNXYtE0S31i0Vry7mvY2M0ENxqk82CAQW2M5HQkZx3rcuLaC7t3guoY5oXGGjkQMrD0IPBqCw0rT9LRk0ywtbNWOWW3hWMH64AoWgPUw9Xt7O2hvtb0fVVsLqEMZ2SUNBK6jG2WPpnjbkYbtntUOp6sttrfhm+1GL7OssExmLdLcsqcsewBwCfet9tD0l9QF++l2TXgORcG3QyZ9d2M1Vv7eSXxTpUnks8KwXCyNtyozswCenODSDqVvF1zFc6DJpVvIst3qg+zwRo2SQ3DP/uquST7UnmxaT42ne9cRRalbQx28rnCmSMvmPPqQ4IHf5vStax0fTNMZ203TrSzaT75t4FjLfXA5qxcW0F3bvBdwxzwuMNHKgZW+oPBpgYXiiaK9S00a2kV7y5uoZNiHLRxxyK7SH0AC4z6kCpoAP+E+vjjn+zbfn/trNWhYaVp+lxsmmWFtZoxyy28Kxgn3wBVgQRC4acRIJmUI0m0bioJIGfQEnj3NC0/ryDo1/W9zE1T/AJHTQP8Arndf+grVTWIbSytb/XdE1RbK4i3PMEkDwTyLwVkTpuJG3K4b3PSuleCGSaOZ4kaWIERuVBZM9cHtmqp0PSTqH286XZG8zn7SbdPMz67sZpDOb1G2t5/FNhe6zJd2MV9YLChivJLcJMGLeWxRlySGOM/3TWlFomiW+sWiteXc17GxmghuNUnmwQCC2xnI6EjOO9blxbw3du8F1DHPC4w8cihlYe4PBqCw0rT9LRk0ywtbNWOWW3hWMH64AqhFuuRF7caf4Q167sjtmivbkh9u7YPNOWx3wMnHtXXUyOCKFWEMSRh2LsFUDcx5JPuanr8v8h9Pn/mcP4s07w/a+Db2eQnUrma0kNs9xctcPI2wneoYkDH3sqAAB2rU1jCWvhiV2CpHfQ7mY4AzE6j9WA/GtiDQtItvP+zaVZQ/aVKz+Xbovmg9Q2ByD71ZntLa5tGtbm3ilt2Xa0MiBkI9CDxins7+n4C/4P4nM+I7W0bxPpd7qNxcQWTQy2pngu5IBHIWQqGZGHB2sOTjIA64q0dC0KHULNJ768luDKJbeGfVZ5NzJ82QjSEHGM9K2o7CzisfsUVpAloFK/Z1jAjx6bemKjsNH0zSt39madaWe/732eBY931wBmhaA9SjpAH/AAkmvnHPnQ8/9sVqNv8Akoi/9gpv/RorbSGKOSSSONFeUgyMqgFyBgZPfjik8iH7T9o8pPO2bPN2jdtznGeuM84pW1X9dGgeqa/rdMwfB11FBoiaTPIEvtNJgnic4bgnD47qwwQferHiCL+0vD73GmOk1xasLm2aNgQ0kZztyPXBU/U1ev8AR9M1QodT060vCn3DcQLJt+mQcVS1i9lsLMafo1lM13NHstvKgPkw9tzPjaoXrjOT2Bod7abjW+uxX8OXEeuX134giJa3lVbazJ/55ryzfi5I/wCACuhqrplhFpel21jb/wCrt41jBPU4HU+561aqnbZEq+7CiiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCOWCGdo2miSQxPvjLqDsbBGR6HBIz70T28N1A8F1DHNE4w0cihlYe4PWpKKAI7i2gu7d4LqGOaFxho5EDKw9CDwagsNK0/S0ZNMsLWzVjllt4VjB+uAKt0UAUW0PSX1AX76XZNeA5FwbdDJn13YzVW/t5JfFOlSeSzwrBcLI23KjOzAJ6c4NbFFAFOx0fTNMZ203TrSzaT75t4FjLfXA5qxcW0F3bvBdwxzwuMNHKgZW+oPBqSigCpYaVp+lxsmmWFtZoxyy28Kxgn3wBVgQRC4acRIJmUI0m0bioJIGfQEnj3NPooAjeCGSaOZ4kaWIERuVBZM9cHtmqp0PSTqH286XZG8zn7SbdPMz67sZq9RQBHcW8N3bvBdQxzwuMPHIoZWHuDwagsNK0/S0ZNMsLWzVjllt4VjB+uAKt0UAFU7/R9N1XZ/aenWl5s+59ogWTb9Mg4q5RQAyKGKCFYYY0jiQbVRFAVR6ACqdtoWkWV2bqz0qyt7hs5mit0Vznr8wGav0UAMeGKWSN5Ikd4iWjZlBKEjGQe3BI/GkmghuYwlxEkqBgwWRQwyDkHB7ggGpKKAK97YWepW5g1G0gu4SQTHPGHXPrg8UTWFnc2X2O4tIJbXaF8h4wyYHQbTxirFFAFax02x0yExabZW9nGTkpbxLGCfoBU0UMUAYQxpGGYuwRQMseST7n1p9FAEaQQxzSTJEiyy48xwoDPjpk98VCmmWEeoPfx2Vul5Iu17hYlEjD0LYyRxVqigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii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W3a2fep8wLEFbgHIwfXFdLRR0sHW5yngvTNV0D4bW1jNaouqW8UpWB5AVLlmZQWUkYOR09a3NCm1S40K0l1+2htdRaMG4hhbciN6A5P8z9TV+im3dtgFFFFIAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqjaf8hjUP8Atn/6DV6qNp/yGNQ/7Z/+g0AXqKKKACiiigCj/wAzD/26/wDs9Xqo/wDMw/8Abr/7PV6gDF8Ua/J4f02KW0sv7QvLiYQ29r5vl+Y2Cx+bBxhVY9O1XtI1OHWdFs9Stv8AU3cKzKM9Awzj8K4fxNq2tyfEi2Tw94eOuro1oXmj+2R24jlm4U5fqQingf36w7a+1WD4U+KNGmsptOv9MnO+0jlErw2sriTCsvBwjOMj+7SWzf8AXb/gja1S/rv/AMA9StNb0rULyW1sNTs7m5h/1sMNwrvH9VByPxovdb0rTbmK31HU7O0nm/1UU9wqM/0BOT+Fc14XHw8W8sx4T/sY3ohPlfYyhn2Y534+bp13d/eub0ZvBL3mvt47Ol/23/aM4nGq7PMEQb915e/nbs2421XWwlqrnp19qNlpdqbnU7y3s4AQDLcSrGoP1JAqS3uoLu2S4tZ454HG5JY3DKw9QRwa8r+JDXH/AAm2kKT4d/s/+z2NuPEm/wCymTd82Mcb9u3G7tnFT+GdMiTwH4ni1bWtBh0y9cgyeH5y9vZ7kCtgH7vY46cnpU/Zb/rewdUj0Ww1rS9Ullj0zUrO8khOJUt51kKfUAnH40k+t6Va6hHYXOp2cN5Ljy7aS4RZHz6KTk1554LvNIsPGFnplrbeGb24mt5BHqfh/ajBVCkiaNc7d3HO4jI7Vla6/hzRNU1fUjN4Z8QJJdvN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iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKo2n/IY1D/tn/6DV6qNp/yGNQ/7Z/8AoNAF6iiigAooooAo/wDMw/8Abr/7PV6qP/Mw/wDbr/7PV6gCGK0toJ5poLeKOW4YNNIiANIQMAsR1IHHNCWdrHdy3SW0K3EyhZZhGA7gdAW6kDJxn1oS9tZLySzjuYXuYlDyQLIC6KehK9QDiiG9tbm4ngt7mGWa3YLNGkgZoiRkBgOhxzzQBXstD0nTbmS407S7K0nl/wBZLBbojP8AUgZNF5oek6hdx3V/pdldXEX+rmmt0d0+jEZFXqyo/FXh6a++xQ69pkl1vKeQt5GZNw4I25zn2oAuX2nWWqWxt9Ts7e8gJyYriJZFz9CCKjstF0vTbSS107TbO0t5STJDBAqI5IwcqBg8cVdooAo6domlaRv/ALJ0yzsfM5f7NbrHu+u0DNNbQNHfUxqT6TYtfA5F0bZDKD/v4z+taFFABRRRQBn2mg6PYXr3ljpVjbXMmd88NsiO31YDJp1xoek3eoR391plnNeRY8u4kt0aRMejEZFXqKAIWs7Z7xLt7eJrmNCiTFAXVTjIDdQDgce1ENnbW8081vbxRS3DBpnRArSkDALEdTgAc1NRQBnnQNHOqjUzpNib8HIu/syeaDjGd+M9PercNrb28kz28EUTzv5krIgUyNgDcxHU4AGT6VDd6nZ2N3Z211NsmvpDFbrtJ3sFLEZAwOFJ5xVugCve2FnqVq1tqNpBdwN96KeMOp+oPFMTStPj0w6dHYWyWLKUNqsKiIqeo2Yxg+mKh1LxDoujzJFq+r2FhI67kS6uUiLD1AYjIpdN1/RtZkdNI1axv3jGXW1uUlKj1IUnFG4EFr4R8N2N1Hc2Ph/S7a4jOUlhso0dD6ggZFa9ZGk+JLPWdX1bTrWK5SbSpVinaWLarFhkbT3H5fkQa16OgdSFbS2S8e7W3iW5kQRvMEG9lBJClupAyePeo7nStPvZXkvLC2uJHhMDtLCrFoyclCSOVJ7dKtUUAZFr4R8N2N1Hc2Ph/S7a4jOUlhso0dD6ggZFF34S8OX93JdX3h/S7m4kOXmmso3dz7kjJrXooApyaRpsulrpsun2r2KqFW1aBTEAOg2Yxj8KdBplhbaebC2sbaGzKlDbRwqsZU9RtAxg1Jd3ltYWr3N/cQ20EYy8szhFX6k8Cksr601K1W5066hu7d/uywSB0b6EcUbhsRf2Rpvl2kf9nWmyyIa1XyFxbkDAKDHy/hirlFFADJoIrmB4biJJYnG145FDKw9CD1qpZaJpWmW8tvpumWdpDN/rI4LdI1f6gDBq9RQBHBBDa28cFtEkMMShI441CqigYAAHAA9KqaloOj6wyNq+lWN+yDCG6tkl2/TcDir9FG4FOTR9Mm0tdNm060ksFAVbVoFMQA6AJjHH0qS30+ys332lpBA/lrFuiiVTsXO1eB0GTgdsmrFFAGX/AMIxoH9oi/8A7D037aH8wXP2SPzA397djOfer0VnbQXE88FvFHNcEGaREAaUgYBYjk4HHNTUUeQEFtZWtlZraWdtDb2yghYYowqAHk4UcdzVax8P6NpjzPpukWNo042ytb2yRmQejYHP41oUUAYsXgvwvBMksPhvSI5I2DI6WEQKkcgg7eDV270XSr+8iu77TLO5uYf9VNNbq7x/RiMj8Ku0UAULjQdIu9PWxu9Ksp7RH8xbeW3Ro1bn5gpGM8nn3NN07w7omjzNNpOj2FjK67We1tUiZh1wSoHFaNFAGfbaBo9lfPe2ek2NvdyZ33EVsiyNnrlgMmrVzZWt4Yjd20M5hkEsXmxhvLcdGGehHqKmooAKKKKAM+90DR9RvI7vUNJsbu5jxsmntkd0xyMMRkVbFrbreNdiCIXLII2mCDeVByFLdcZJOPepaKAIrm1t722e2vII7iCQbXilQMrD0IPBqC00jTbAxGx0+1tjDGYozDAqbEJBKjA4BIBx7VcooAy7rwxoF9e/bL3Q9NubokHz5rSN3yOnzEZrUoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKo2n/IY1D/tn/6DV6qNp/yGNQ/7Z/8AoNAF6iiigAooooAo/wDMw/8Abr/7PV6qP/Mw/wDbr/7PV6gDz74oXL+G1sfFOkMg1iBjapAVLfbInBJQgcnaRvHpg+tbPhWC10HwGl9aPLqzzQtfTz2yb5byVhuYqOMk9APYCrjeG/tHjNdev7oXC29v5Nla+Vhbct/rHzk7mbgZwMDjmjw14cPhoX1tbXfmadNOZrW1MePsu7lkDZ5XdyBgYyetEdmv69PnuN7p/wBf0tiDw54w/wCEivZbf/hHdf0ry49/m6nY+SjcgYB3HJ56V5VYxafqmg6xpMPgG81XVri9vEi1QWKLEGMrbT9oJyNv9MV7xWP4Z0H/AIRzSpLP7T9p8y6muN/l7MeZIX24yemcZ70rJv5fqhXaXz/RnNalceKNNvfC/h7Sb63NzcWEqXVxcpvUNGsYMuOrEZbAyAS3PSkm1Txf4V0HUk1ia31e6+0QW+l3zRLCszTEL88aH5QjH8RXU3mifa/FGm6x9o2fYYZovJ2Z3+Zt5znjG30Oc07xDoVt4k0OfTL1pI0lwyyxNteJ1IZXU9iCAabd9X8/v/yBJKy7HKx3Hi3wtr2kr4h1231uw1W6+yMq2S27W0jKWUqVPzLlcHPNNt7jxh4uvLy/0PXbXRdNtbuS2t7drFbhrny22s0jEjaCwONvar+leCtSTWLXUPFHie411rBmazhNqlukTEbdzBfvsATgnpk1FP4F1W21S6m8NeLLrRrG9mae4shaxzDe33jGzcpnrxnmjr/Xl/we4f1+f/AM34h+OX0LV7LRf7eg8PNNbG5m1BrFro/e2qiIARyQxJPYVJ4T8b6jrvg/XpdNmh13UNLytrcR27QreZTcpMZwQc5BA64461v+IfCt1qd3b6jomtz6NqlvEYBdLCsyyRkg7XRuG5GQe2TT9P0PXY/D93Y6x4plvryZiYb+Gzjt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nmpvbUryO3orm4ZfEus+CbCW3kt9I1e5iRrhpoDIIcj5tqEj5umA3TvVLwlf6/b+KNU8O+IdRh1c2cENxHfR24gbDlhsdV4B+XIx2/Sra2Jvpc7GiivPtX13XNZ1fVodH12y8M6Po0iwXGp3MKStJMQCVAchVUbgMnnJqetij0GivNtT8T61p2laFNba/Y6sPPmlvLqyiQpdW8Q3OOMhWC5ztPUVeudb1vUPiE2m6bqQs9Nms7iC3cW6SYuEWNjLzyQPNA25xlTT62X9af0vUS1/r+vU7uivL7ew8fTeL7zQ/wDhYOPstpFc+d/YsHzb2ddu3tjZ1z3r09AQihm3MBycYyaOlw62FooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqNp/yGNQ/wC2f/oNXqo2n/IY1D/tn/6DQBeooooAKKKKAKP/ADMP/br/AOz1eqj/AMzD/wBuv/s9XqAPO9T1i78NfFDUr3/hHdb1SC80+3ijk06zMqBlZyQzEgD7wqBtP8WW/hjxL4gtrR7TXdXnjeO0hZZJYIE2pgdjJs3HHrjvxXpdFK2lv63uPrf+trHj/hLTdRk+IWj6iLfxi9lHFcK8viSQN5bFB91B9wH1PXgDpXRanqd94S+IGp6k/h7V9WsdTtbdY5NLtxO0bx7wQy5GPvA5rvqKb1t5ErS/n/X6HmHxA0e+uPENh4hhTxOtm1h9nlj8PyiO6ibdvG5D94HOCB0Kitn4aWFvb2Go3UEfiZJbq4Xzj4kUCdyqABhjquMDJ9Pau2ooWl1/W9xvXV/10MnQdYu9XW+N7pFxphtrt4IxOf8AXovSReBwfy9zWtRRQB574h0m8v8A4oQ2v9nTTaXqFlALu58s+Uohlkk2M2MZJ2jHoTWBH4Z13V/DPiOwks7yC7thZ2tu7fuWultnJDRuf7y4w3Tca9hopWsrf1uN6u55F4S06G58Zac93F8RjPaM8kb66Q9ojbCDlsdwSAR1qVpte0rwzrvhC38L6hd3c73jRX6oPszxSlm3lxyXw2NgBJIAr1iih6qwJ2dzmp9Vm8L/AAzj1JrGS5lsNOjd7Ut5bHag3AkjjHOeM8dK19F1Nda0Kx1NImhW8t0nEb9VDKDg/nUGt+GdH8R/Zv7csI71bWTzIklJ2hsY5XOG+hyK1FVUUKgCqowABgAVbd22+pCXKkl0FrzHxl4nuX8W6OLfwn4luY9G1B5ZpoNNLpMvlsmY2B+blh1xxXp1FR1TK6WPOvGMt3qn/CP6rdeH9W1HQNjy3mkxwjz/ADCB5fmQ5+YDnK5wD1qz8ObC5ttQ1m5tdJvdE0G6aN7LTr4bXjfB8xhHk+WpOOK7yimtAeoE4BPp6CvKbXwV4s8RaZq14/iVtGg16aWSfTZtJSRwh+RVZnIYHYq8cYr1aila47tHkE+vX2mX/gS+1jRdUur63tby3mtLa1LzsyqqbwhxkHG7Poa2UtNU1rTfGWvTaRc2H9p6Z9ls7KZP9IcJHJ8zIM4JL4C9eK7S70O2vPEGnaxK8ouNPSVIlUjYwkADbhjPbjBFaVOXvLXz/FsI+61bpb8DI0XToG8K6RbX1nGTb28DCKaIfupFUYOCOGB/EGteiinJ3bZEVypI5H4g+ItX0PTraHQdK1C9nvHKPcWVobg2qDGW2dC3PygkDg56YOLZQQ+J/AOseGtJ0LXdHka3LC41m18o3EzHdvL5O5iwyT716RRU2umn1Lvqmuh43pGiNqMFpodl4O1TS7xrqGfWdW1Nd3mCNw7BJiSZNzKMYwOc4rY+IPiG5k1jTbG08L+Irv8AsrVYLuW4ttPLxSoqkkIwPJ+YDnAyDzXplFVd3X3/AJf5E2tf7vz/AMzzzxhcX2vaPoWpDQdXn0Xz3k1PSPK2XUigEIGj3fMu4ZK55yKX4f2UyeJtUv8AS9Dv/D+gXEKbLC+QRE3GTudIgTsG3A7Z49K9CooWjuhvVWCvH5tDXwz421S61LwhqviR7i6e50mWBfOt4TJyyspO2M7/AOIg8YI6c+wUVPW4+ljze5uNf8B/DjT7Ow0u61DVrqV2uHsrY3AtWkYu7bR97G7ABIBI61q+ANUtpYZdPtfD/iHTmUGee71mz8o3UhPzMWydzH07AccDFdnRTW7YnsZOnaxd3uv6pp9xpFxaW9kYxDeSH5LrcuTt47dO/wCHSuK8a+Ir+bxI+iXXhvxFc6DCqtcPplg0v25iAfL35AEYzzjJbkcDOfS6KXYfc848T26eJdG8P69/wil9c2mm3LmfRbq2CTmIqUyIicHBCkL3FT+CNOWXxbe63pnhqfw1pclmtv8AZriBbd55Q5O8xKcLgcZ75r0CiqWjv/XYl6q39b3Mmz1e7ufE+oaZLpFxBa2scbxX7n93cFhyq8dR9T744zzni/U9Ln1b+zNT8Bap4gkjTEVymmpLCNwyQsrEbe2TxjFdzRU2uUefG78Q+BvhXYQwaVdanqwPlLBbo1ybZWZmXdjlgi4XqASAMjrU/gDVoZJpbEaB4ktbuYG4u9S1iw8kXMnA5bccH0UcADA6V3VFVfVt9SeiQV5tei58Kazrtvqfha88RaDrNyLxPsVstyVkKqGSSInplQQen9PSaKnrco8u8J6HdpdaDHdaNcWdmz6pKYJIdqwJK48tWC8KSpI2/wCFbieG/wCwvEvhK30xLqazs0vUmncFzl1DbpGAxywPXqa7Wintt/X9XEczZ2lwvxR1W7aCUW0ml20aTFDsZhJKSoboSARx7iumooo6WDrcKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqjaf8hjUP+2f/AKDV6qNp/wAhjUP+2f8A6DQBeooooAKKKKAKP/Mw/wDbr/7PV6qP/Mw/9uv/ALPV6gDMstdtb7XtR0hEljutPEbSeYAA6uMqy4JyOCOccinWmt217ruoaVAkpl09YzNIQPLy4JCg5znAyeO4rnPEUkfh/wCIeja7Iwjtb6GTTbtz0BAMkRP4q4/Gjwlotvrvgm7m1u3Mq+I5pLy4iLFSY3P7tcggjCKlCu1f+r9PvWoPR/1t1/HQ3dAuNduBf/8ACRWVvaFLt0tPIk3eZAPus3JwT+H0Fa9cR8NNLs9FTxJp2mQ+TaW+tSJFHuLbR5UXGSST+Ned+MGg1GHWPEuj+F76byJZRH4gn1zyWhkRsfu4d3KgjAXGT9aTaVvRP8EOz19T3uisDXrDT9c8Dy2viC8a0s7iBDPcCYRbOhzuPA59eK27eNIbWKKJiyIgVWZtxIA4JPf61TVm0SndJklcxb/EDQ73xVDoNg891cStInnxRHyEeMZZS5wCQP7uevOK6euM1+KOH4meDUhRY1xfnaowMmNST+dJbj6HZ1V1PVLLRtNm1DVLlLa1gG6SVzwvOP58YqS7vLawtXub64itreMZeWZwiL9SeBTmWG6gG4RzRPhhkBlbuD/I0egepj+GfFth4rjvH02K6jWzmELG5h8suSoYMAecEEdQD7VuVx/gz/kZ/GX/AGFV/wDREddhR0T8l+QdX6sKK5LxFF/ZPjbQ/ECfLHOTpd4f9mQ5iJ+kgA/4HXO3t5e2/gXxZ4wsNwvNSl22siuFKWyMIkYE8Dje+f8AazSvpf8Ar+tbjtrb+v60Z6fRXj3hXw/runeJ9LvtK8GXGi28kudQuz4gS8W6iKnJZM8nJDAj8qyfEem2/ibWPEkV74d1rX9Ua7lt9M1C0ZvstsAAFQksFXa2d2QQTmm+39dP8xLX+v67Hu9FeeLpUHh/xl4D02JEhSCyvIwocld+xCwBYknnJqlJdQXl78UpLSZJoxZIhaNsjctqwIz7EEUS0Ta8/wAHYcE5NJ6bfieoUV55ofw7tZLPQdfh1G8XW41gnlvpZWcyx7QWh2bgqoQcDA4969DqpKzsRF3SaCiiipKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig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0754Fa/i3w54q166ns4v+Eau9Hm+5/aVrI09tlcHZtOCc5IPBpsS31F8ZanBpniLwhqOrulnDDNcyTlmyI/9GfIz354461u+HL/WNVhmv9TtI7G0mYGytmQ+esf96U5wCeu0DgdST0zbvwY90vhi2uZo7600lJIrs3Wd1wrQGLpg5JJycnp3NX/DOk6noQuNOuLmO60qIj+z5HdjPGn/ADyfIwQvZs5xwRT05n/X9f8ADhrZf13/AK/pm9RRRSAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKo2n/ACGNQ/7Z/wDoNXqo2n/IY1D/ALZ/+g0AXqKKKACiiigCj/zMP/br/wCz1eqj/wAzD/26/wDs9XqACiuU8R+JdWi12Hw94Tsba71WSA3Mst47LBbR5wC23kknIAHpWhpN/q9potxceNhptnJbEs89pM3kMmAd3z4K9xg+lHS4dbG3RXPaB498MeKLyS00LV4rq4jBJi2MjEDqQGA3D3Gaqz/E7wba3MVvca7BHLJI0QVkf5WVip3cfKMg8tgHr0oA6uiuJ8afE3RvCOoWlhPdxi7kmiaeN4ZG8u3Ync4KjBIx0yT7VtaJ4z8P+ItLudS0jUUms7QkTzOjxLHgbjneBxjnNG6uHWxuUVz+geO/DXii8ltdC1aG6uIgS0W1kYgdSAwG4e4yKqT/ABO8G2tzFb3GuwRyySNEFZH+VlYqd3HyjIPLYB69KAOrorifGnxN0bwjqFpYT3cYu5JomnjeGRvLt2J3OCowSMdMk+1b3hzxXovi2zluvD979rhhk8t28p0w2M4wwB6Ghaq6B6GxRRWJoetXGp61r9nOkSx6bdpBCUBBZTEj5bJ5OWPTHFHWwG3RWVr/AIm0fwtYrea/fx2cLNtUsCxY+gVQSfwFRQ+L9BufDUviC31KOXS4QTJOis2zHUFQNwPI4xmgDaqtY6ZY6ZG8em2VvZo7F2W3iWMMx6kgDk+9ZGmePPDGs64+j6XrEFzfICTEm7DY67WxtbHsTVfXfiT4S8N6k1hrOsxwXSgFokiklKZ9dinB9jQG51FFcD4l+Lnh7R9Jsrixv45pb3ypYVkt5cNAZdjv90YwA5weeOlS6l8Q9M1fwHr+p+DdT864062L+Z9nZfLYgleJFAPQ9jSeib7AtWl3O5ormtG8e+HNW1OPRrbWILjVBGC8Sg/MwXLANjaSOeAex9K1bvXdNsdYstKu7tIr2/Dm2hIOZNoy3OMD8etU1Z2EndXNCiiobySeGxnks4BcXCRlooS+wSNjhd3bJ70hk1FcRY+I/Fmn+KtO0zxdYaULfVjIttLpsshaFkXftkD9cgdRxUvirWPGekSXmoaZZ6H/AGNZR+Y4vLiRZ5wFydpA2r3AznpQ9NRpXdkdlRWBqV94hvNBsrjwtZWS3d0iyONUd1SBSucEINxOTjtUfg/XtT1iPUbbXLa1ivtNufs8sllIXglO0NlSeRjdgg9KdndrsTdWT7nR0UUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABVG0/5DGof9s/8A0Gr1UbT/AJDGof8AbP8A9BoAvUUUUAFFFFAFH/mYf+3X/wBnq9VH/mYf+3X/ANnq9QB5/rurJ4K+I0uu6xDMNG1Kwjt3vIomkFvLGzEBwoJAIbr6ik8Ua1aeMfAjX+hW9zqWn2t/byzx/Z3X7VCjqzhFYAsMe3Y16DRQtF6f53H1v/W1jzb/AISDSPHHjDw63hNJbg6XcPLdXn2V4lt4vLZfKJYDliRwPSs6ysrWP4K+MJ0t4xLPLqLSvtGXKyOFJPtgY9K9aopNXTXdP8bf5Anqn2/S/wDmcJ4uma18EeH9SaKWaGwu7O6ufKQuyxr95sDk4zmq/inXLLx/8M9UbwZdyXvkyxCXy7Vi2FdXYCNwN/y87eh6V6HRTlq35u/5f5Ex0t5K39feeN+FdRtte8daP5/xD/te7sTI0VifD/2RseWQy7wAAAO3I4q1ZWVrH8FfGE6W8Ylnl1FpX2jLlZHCkn2wMeletUUpK6t5Nffb/Ia0af8AXX/M4TxdM1r4I8P6k0Us0Nhd2d1c+UhdljX7zYHJxnNbukeItF8c6Le/8I/qc0kOGt3uIEeGSJivVSygggHIOOtb1FU3dvzd/wAv8hJWtboc34d8G/8ACPag93/wkfiDVN8Rj8nU77zo1yQdwXaPm4xn0JrlbXx74a8JeNvFlr4g1L7JNNfxyIvkSPlfs8YzlVI6ivTqKWt7j0PKPH19N/buh+KLDXpdI0mTT2EWprpf2xYy5VhlGGU3LjnGeMVmRm1u/hb431K08UDxE14FM8y6cbMI6qB93oSRt5A7V7VRSsuVx9fxd/62Hf3lI4TXbO2sdW8BQ2cEcEcV6yRrGoAVfs78D24rzzWPEv2LWPFOgy6vpelWGp6hMt0NQsbia5jDAKWQouwggZUMeARzXv1cJ/wgOu2dzdR6F41uNP026nknktG0+KZg0hy+JG5HJ9OKNeZvvf8AT/IS0ivK34X/AMx/jExS/C+2udHZ9RtbV7O4V4f3jSRRyoxYY6napP51U8SeMtC8XfC/xO/h6++1i2smEuYXj2Eg4+8oz0PSuz0LRbXw9oVppOnhvs9rHsQucs3ckn1JJNaFOa5uZdwh7tn2OA1uytrBvAENlBHBHFqKKixqBtBgfI/Hv610WqavpNp4t0bT72yaXUbsTGzuBbhxDtUF/n6rken41u0U27u/nclKyt5WCqer6pbaJo13qd8WFvaRNLJsXJwBngetXKKl3toWtzynwr8QvDHiLxRbajq2rKdWmJt9O05LeYraK5xgvsw0jcZbOB0HGSZPHV78PNW8QTW+pveTeJrKPybdbCO586Nh8yhNo2E5bOTnrXqVFN62Em0cDrep6HafDvSrH4sTbXvYYxcIVlJeVArHJiGQQcegp/w0hSA6qmirer4Y3xnTFvFcEHafM2b/AJvLztxnvuru6Kd9W+4raJdgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqNp/yGNQ/7Z/8AoNXqo2n/ACGNQ/7Z/wDoNAF6iiigAooooAo/8zD/ANuv/s9Xqo/8zD/26/8As9XqAMvXvEuj+GLIXevahFZQscKXyWc+iqMk/gKXQfEek+J9O+3aDepeW4YoWUFSrehBAIPI6iubSK3vPjbcf2gFkls9IiexR+dm6RhI6j14UZrR8cX9zpGgA6Q8dpeaheQWguigPlGRwnmEdyB0z7ULZPv/AJ2Drbt/lc6aivPV03UfBXijQxF4k1XV7XVblrW5ttTmExB8tmDxnA2gFeR6GucW18QXfgjW/E0ni3VoZNLuLx7K2hlAjxHI3EuQTIOMAE4AwKV1/Xy/zDy/rr/keuXuo2mnLAb2YRC4mWCLIJ3SMcKvHrVmvMPHugnWk8PatJresWbXl5Zwm3tbvZDGWyfMRccPzw1aeuQ3fw8+H+oz6dqusatdSSxrFLfy/apYi7KnyDAzjOQvc09k797fl/mC1at1V/zO8oryTwjqesW/jCwgtYPHE9lds63x8RWn7qP5SVdHH3PmGMdMGqq2viC78Ea34mk8W6tDJpdxePZW0MoEeI5G4lyCZBxgAnAGBQ7LcNz1y91G005YDezCIXEywRZBO6RjhV49as15h490E60nh7VpNb1iza8vLOE29rd7IYy2T5iLjh+eGrsdI0Ofwtot6tnf6rr1wQ0sSaneh3ZgvEauQAoJHfpnNGyd+jt+Qt2rdV/mb1cPL8ZPAcMzxS67tdGKsPsc/BHX+CtTw7rfifUtQeHX/CP9i2yxFluP7TiuNzZGF2qMjgk59qr69/yU3wl/1yvv/QEos7oZ0WmanaazpdvqOmy+da3KB4pNpXcvrggEfjVquW1u4utI8caJfG5m/s6+DadPCXPlpKfnifb0BJBXPuK57WtQ1KXwL4w8RwX91CsxaPTgkzKIoojs3rg8FmDnI6jFJtWb9f6/UaWqXp/X5npVFecNY6z4Y1rw/qU/ifUdTl1W9S0vLS4YfZyHRjuijA+TaVHc1zOp+I9X1fWNUukHjlJbS7mgsl0SzVrJRGxUbwf9YSRk59cU9v67W/zEtf673/yZ7bRWBbpqfiLwBEtxNPo2p3tkokkRCslvKV5IU4IIPbg/StfT7aWz022tri5ku5YYlR7iQYaUgYLH3PWm1ZtCTukyxVZdRtG1V9NWYG8SETtFg5CEkA56dQfyqzXk48BCf4m31n/wlnieM/2bHcedHqWJTulcbN237gxwOxJpfaS/rYr7Lf8AW56xRXmnj3U73SH0Pw3azeI57eS2d7i40hBNfyiMKo+Y4xktlmxnOPWpvA8mq61p+t6NqH/CTWtiqoLK91eM294u4HcA6/e2kAg9ecHijdNoW1rnotVjqNoNVGmmYfbDCZxFg58sNt3Z6dTivPvCmt6n4p8RQ6XqGoGJdBDNNJbSMn9quHaNZBjGYxtO4cgucdBVO78Ci4+Kj23/AAlXiWEzaa915kWo7XTMwHlqdvEYz936UdV53/INk/K35nq1Ys3imyhtdbufKuHh0UH7Q6KuHYJvZU55IBAOccmi9uU8I+DZJpJ7m++w2+1HuZN8079FDN3ZmIH41iahpL6L8HNVtblg922nXE11J/fmdWZz/wB9E/hipk7JtdP6/r5FQV2k+p11jdpf6fb3kIZY7iJZUDjkBgCM+/NMbUrRdWTTGmAvJIWnWLByYwQpbPTqwFeZ2llrPh2DwhrMniPULuTUbm2tJ7FmAtFikjOAkeOCoA+bOTijUfA/2n4sJb/8JR4kh+06dPdeZFqG14v3yfu0O3iP5vu+w9K0kvfsu7X3K5nF3jd9k/vdj1amTy+RbyS7Hk8tC2yMZZsDOAO5rzjxPp2qQ6xomgad4j1W3txpd29xcm4JnmCGMg7sY35IG7GQC2OtQfD681p9c0S41XW7q/8A7Y0R7mWCVv3UbI8YQovY7W+Y9zk1K97Rf1v/AJFXtv8A1t/mdd4X8Z2/ii6vrWPStV0y4sRG0sWp24hYh920gbif4T1xXR1yei/8lS8Uf9elj/KWusoDZ2/rYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqNp/yGNQ/7Z/+g1eqjaf8hjUP+2f/AKDQBeooooAKKKKAKP8AzMP/AG6/+z1eqj/zMP8A26/+z1eoA5/xL4M03xRJbz3Ul3Z31rkQX1hOYZoweoDen1Bplv4H0tPDV1ot/NfapBdtunmv7lpZnYYwd3YjAxjGMV0dFHSweZy+heAdP0TVE1GXUNV1a7iUpby6peGc26nghBgAZHGetWY/B+nx+FdQ8PrNc/ZL8zmVyy+YvmsWbB244LHGQfxrfooeu4bGPq/hjT9b8Opo16ZvIjCeXLHJskjZMbXDDowxVSw8FWdt4fvdH1LUdU1u1vDmQ6pdec6jA4VgBt6Z46Hmujoo3v5gtLW6HK6J4FXQ9Wjvo/EviO8SMELaXuoebBgjH3dvbtzVuPwfp8fhXUPD6zXP2S/M5lcsvmL5rFmwduOCxxkH8a36KHruGxj6v4Y0/W/DqaNembyIwnlyxybJI2TG1ww6MMUeHPD3/COWctv/AGvquq+ZJv8AM1O58504xhTgYHHStiijq33C2iQVnXei297runarK8on09ZViVSNreYAG3DGf4RjBFaNFAHE+PpbzW4m8KadouoSz3YjkGp7Nlta4fO/zM53rtztAyeKseNdGaL4T6jo+kW0sxjshBBDChd2AwAAByTxXXUUmrxce407ST7HI+Hfh/Y6Re2+pXWo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Qr5b7jlsrjBySSfWm32i6VqaQrqWmWd4sBzELi3WQR/7uRx+FSlay9PyaG3dt+v4tM4T4V6pZ2HgvU7rUbzTLS0j1WYCW3kMdomduBGXxhSTwD61d+HGuaTdPrlra6nZzXE2s3c8cMdwjO8ZYYcAHJX36V1s2iaVcWc1pcaZZy207+ZLC9urJI3HzMpGCeByfQVDYeGNB0q6+06XomnWU4BXzba0jjbB6jKgGqvr8rfl/kTbS3nf8/8AMy4P+J58Qpp/vWmgxeRH6G5lALn/AIDHtH/AzT/G0slzp9toNqxW41qb7MSvVIcbpm/74BH1YVraPo9volk9vbPJJ5k0k8ksxBeR3YsxJAA746dAKG0e3fxCmsSPI9xHbG3jQkbI1LbmIGM5OFBOeiil2T/rr+enoPu1/X9b+pgfEmKOD4Va1DCojjjs9iqvAUAgAVQ8H2WgWmtK+m/EHUNeuGhZRZXOtR3K44JYIOcjHXtzXcXVpb31rJbXsEVxbyjbJFMgdXHoQeDVCx8L6Bpd0LrTND02zuFBAlt7SONwD1GQAaOrbB7JL+tjy6If2P8ADqy8QL8sMlteadff7kkknlOf92TA+khr07wl/wAiXov/AF4Qf+ixVw6Vp501tONhbGyYENbeSvlkE5IK4xyeasQwx28KQwRrFFGoVERQFUDgAAdBQtE1/XX/ADB6tP1/T/IJpY4IXlndY4o1LO7nCqB1JJ6CuI8KQyXHie41HwwjWXhiYMXjmX5LuY/8tYE4Ma+rdG7L/FXcSRpNE0cqLJG4KsjDIYHqCKVVCqFUAADAAHShaO4PVWFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKo2n/IY1D/tn/wCg1eqjaf8AIY1D/tn/AOg0AXqKKKACiiigCj/zMP8A26/+z1eqj/zMP/br/wCz1eoAKCQASTgDqa5vxP4kuNOvrHRdJijOqaluFvLdfJBE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z5F8vAwOQwJ4PcmotH+HfhbQbW/t9J0v7PFqMPkXS/aJW8xMEY+ZjjqeRg0S97m8yoPlcW+hwkfhi08P6N4N8R2s93JrN1eWUM93Lcu3mRSjDR7c7QoBwAB2FetXV/aWTQreXUFuZ3EcQlkC+Y56Kuep9hVSbw/plxp9jYzW2630+SKW2TzGHltH9w5zk498570av4e0rXZbOTVrNLl7GYT25YkeW478HnoODxVN3b9fw0/4JCVkvT8dSl4yu9bs/D7y+HYPNn3ASui75Yov4njjOA7gdFJH49Cvg600SHQUuPD032uK6JkmvHbdLcSd2kY87s8YOMdMDpW9VGLSbWza+m0yGK0ub075ZVTIaTGA5XIyfyzU7XK3sYukf8TvxtqWrn5rbTVOm2noXyGnYfjtT/gBrll8JaT4p8f+L/8AhIpJ5LK1lt2FsLloogxgXMjbSMkAcZOBzXoGgaPHoOhWumxSGbyU+eVhgyuTlnPuWJP41xx+Gml654717VvFOjrcxyywGxkadgGURANlVb+8P4hRbW3l+q/4cL9TY+G1zNdeA7NpriS6VJJooZ5DlpYllZUYnv8AKBzXVVHBBFa28cFtEkUMShEjRcKqjgAAdBUlNu7Egqjaf8hjUP8Atn/6DV6qNp/yGNQ/7Z/+g0hl6iiigAooooAo/wDMw/8Abr/7PV6qP/Mw/wDbr/7PV6gAorH8QSa5bJBeaCkN2sBJuLBxta4X/Yf+Fh2B4OcHHWp9D12x8Q6aLzTZCyhjHJG67XhkH3kdTyrD0o3A0aKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqNp/yGNQ/7Z/+g1eqjaf8hjUP+2f/AKDQBeooooAKKKKAKP8AzMP/AG6/+z1eqj/zMP8A26/+z1eoAx9f0vUNYSCztNRNhZOT9seEETuvZEbomect19Mdav6dp1npOnxWOm28dtbQrtSOMYA/+v796s0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABVG0/5DGof9s//AEGr1UbT/kMah/2z/wDQaAL1FFFABRRRQBR/5mH/ALdf/Z6vVUudPS4uBN500ThNmYn28Zz6Uz+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9RVH+y/wDp+vf+/wB/9aj+y/8Ap+vf+/3/ANagC9RVH+y/+n69/wC/3/1qP7L/AOn69/7/AH/1qAL1FUf7L/6fr3/v9/8AWo/sv/p+vf8Av9/9agC9RVH+y/8Ap+vf+/3/ANaj+y/+n69/7/f/AFqAL1FUf7L/AOn69/7/AH/1qP7L/wCn69/7/f8A1qAL1FUf7L/6fr3/AL/f/Wo/sv8A6fr3/v8Af/WoAvUVR/sv/p+vf+/3/wBaj+y/+n69/wC/3/1qAL1FUf7L/wCn69/7/f8A1qP7L/6fr3/v9/8AWoAvUVR/sv8A6fr3/v8Af/Wo/sv/AKfr3/v9/wDWoAvUVR/sv/p+vf8Av9/9aj+y/wDp+vf+/wB/9agC9RVH+y/+n69/7/f/AFqP7L/6fr3/AL/f/WoAvUVR/sv/AKfr3/v9/wDWo/sv/p+vf+/3/wBagC9VG0/5DGof9s//AEGj+y/+n69/7/f/AFqltLFLR5HWSWRpMbmkbJ4oAs0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9k=\"\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "110255" + ], + "x-ms-client-request-id": [ + "58f693f9-9f8e-4fc5-bfe9-c3dbc600a44b" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments/newattachment691\",\r\n \"type\": \"Microsoft.ApiManagement/service/apis/issues/attachments\",\r\n \"name\": \"newattachment691\",\r\n \"properties\": {\r\n \"title\": \"attachment1106\",\r\n \"contentFormat\": \"link\",\r\n \"content\": \"https://apimgmtstkjpszvoe48cckrb.blob.core.windows.net/content/issue/newIssue628/attachment/newattachment691/attachment1106\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "553" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:28 GMT" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"AAAAAAAAE60=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "7025c092-c760-449b-b6b6-bb6e93f6ebe7" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1195" + ], + "x-ms-correlation-request-id": [ + "20a63a00-6653-4962-93b7-7c0aa57496cf" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171729Z:20a63a00-6653-4962-93b7-7c0aa57496cf" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments/newattachment691?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9hdHRhY2htZW50cy9uZXdhdHRhY2htZW50NjkxP2FwaS12ZXJzaW9uPTIwMTgtMDEtMDE=", + "RequestMethod": "HEAD", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "bf20301e-570f-419e-9509-a5667250efb9" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:43 GMT" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"AAAAAAAAE60=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "c8c32ff2-e1b8-4d20-b2a0-bbf27054e75b" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14990" + ], + "x-ms-correlation-request-id": [ + "42691740-deb9-4d52-883d-5cbcc12b0354" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171744Z:42691740-deb9-4d52-883d-5cbcc12b0354" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments/newattachment691?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9hdHRhY2htZW50cy9uZXdhdHRhY2htZW50NjkxP2FwaS12ZXJzaW9uPTIwMTgtMDEtMDE=", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "dd118ee5-55d7-44e4-a726-8bb8ac0d2d97" + ], + "If-Match": [ + "\"AAAAAAAAE60=\"" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:47 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "21f40d76-bc06-41d8-beaa-3a88a18f7599" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1194" + ], + "x-ms-correlation-request-id": [ + "9ceaa279-1bda-4bcd-9786-b3299725e3be" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171748Z:9ceaa279-1bda-4bcd-9786-b3299725e3be" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments/newattachment691?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9hdHRhY2htZW50cy9uZXdhdHRhY2htZW50NjkxP2FwaS12ZXJzaW9uPTIwMTgtMDEtMDE=", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "dbc926c3-e592-4abd-bdaa-a249d944e303" + ], + "If-Match": [ + "*" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:18:05 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "a8e4cd4a-93e9-4eac-86ba-ca66cbff8158" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1192" + ], + "x-ms-correlation-request-id": [ + "07011fd0-d08b-4134-a94e-2c31bcef1198" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171806Z:07011fd0-d08b-4134-a94e-2c31bcef1198" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 204 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628/attachments/newattachment691?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOC9hdHRhY2htZW50cy9uZXdhdHRhY2htZW50NjkxP2FwaS12ZXJzaW9uPTIwMTgtMDEtMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "f8e41710-9912-48b1-8a0a-8cdf137497e0" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "{\r\n \"error\": {\r\n \"code\": \"ResourceNotFound\",\r\n \"message\": \"Issue-attachment not found.\",\r\n \"details\": null\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "92" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:50 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "d02e0218-634d-4b52-a6f7-40b21d53bf1b" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14989" + ], + "x-ms-correlation-request-id": [ + "f0007b48-a852-4693-968b-a1c7462c9ae2" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171750Z:f0007b48-a852-4693-968b-a1c7462c9ae2" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 404 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOD9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "HEAD", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "ebcccebe-6770-450c-a22a-b1a43a34327d" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:56 GMT" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"AAAAAAAAE6s=\"" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "a8d0de0f-eaae-4b9b-aefb-2d5e94eb920e" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14988" + ], + "x-ms-correlation-request-id": [ + "db1280e2-5d60-4da3-9fcb-18d4c8fe1bdc" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171756Z:db1280e2-5d60-4da3-9fcb-18d4c8fe1bdc" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOD9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "f8086e47-8474-4aa2-aad3-ca3f6b77986b" + ], + "If-Match": [ + "\"AAAAAAAAE6s=\"" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:17:58 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "b736fa72-eca3-44c6-9c9f-f2a7fc71019f" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1193" + ], + "x-ms-correlation-request-id": [ + "266f1e8e-9017-42ee-999b-f7d0e2453f5d" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171758Z:266f1e8e-9017-42ee-999b-f7d0e2453f5d" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/bab08e11-7b12-4354-9fd1-4b5d64d40b68/resourceGroups/Api-Default-CentralUS/providers/Microsoft.ApiManagement/service/sdktestservice/apis/echo-api/issues/newIssue628?api-version=2018-01-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvYmFiMDhlMTEtN2IxMi00MzU0LTlmZDEtNGI1ZDY0ZDQwYjY4L3Jlc291cmNlR3JvdXBzL0FwaS1EZWZhdWx0LUNlbnRyYWxVUy9wcm92aWRlcnMvTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnQvc2VydmljZS9zZGt0ZXN0c2VydmljZS9hcGlzL2VjaG8tYXBpL2lzc3Vlcy9uZXdJc3N1ZTYyOD9hcGktdmVyc2lvbj0yMDE4LTAxLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "48d7495f-3c13-4731-b3dd-6567c9aca3a8" + ], + "If-Match": [ + "*" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.25211.01", + "Microsoft.Azure.Management.ApiManagement.ApiManagementClient/4.0.1.0" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Expires": [ + "-1" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Thu, 19 Apr 2018 17:18:06 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "Microsoft-HTTPAPI/2.0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-request-id": [ + "fbac33ba-dbf7-4754-8a78-c2467b3653b8" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1190" + ], + "x-ms-correlation-request-id": [ + "098a325b-5d6c-4bce-b91b-05871dc1b788" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20180419T171806Z:098a325b-5d6c-4bce-b91b-05871dc1b788" + ], + "X-Content-Type-Options": [ + "nosniff" + ] + }, + "StatusCode": 204 + } + ], + "Names": { + "CreateUpdateDelete": [ + "newIssue628", + "newComment3514", + "newattachment691", + "title4611", + "description5033", + "issuecommenttext4333", + "attachment1106" + ] + }, + "Variables": { + "SubscriptionId": "bab08e11-7b12-4354-9fd1-4b5d64d40b68", + "TestCertificate": "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", + "TestCertificatePassword": "Password", + "SubId": "bab08e11-7b12-4354-9fd1-4b5d64d40b68", + "ServiceName": "sdktestservice", + "Location": "CentralUS", + "ResourceGroup": "Api-Default-CentralUS" + } +} \ No newline at end of file diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueAttachmentOperations.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueAttachmentOperations.cs new file mode 100644 index 000000000000..9f3b5b75acf3 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueAttachmentOperations.cs @@ -0,0 +1,1666 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + + /// + /// ApiIssueAttachmentOperations operations. + /// + internal partial class ApiIssueAttachmentOperations : IServiceOperations, IApiIssueAttachmentOperations + { + /// + /// Initializes a new instance of the ApiIssueAttachmentOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ApiIssueAttachmentOperations(ApiManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + Client = client; + } + + /// + /// Gets a reference to the ApiManagementClient + /// + public ApiManagementClient Client { get; private set; } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListByServiceWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("odataQuery", odataQuery); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "ListByService", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/attachments").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Gets the entity state (Etag) version of the issue Attachment for an API + /// specified by its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetEntityTagWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (attachmentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "attachmentId"); + } + if (attachmentId != null) + { + if (attachmentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "attachmentId", 256); + } + if (attachmentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "attachmentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(attachmentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "attachmentId", "^[^*#&+:<>?]+$"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("attachmentId", attachmentId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "GetEntityTag", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/attachments/{attachmentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{attachmentId}", System.Uri.EscapeDataString(attachmentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("HEAD"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationHeaderResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Gets the details of the issue Attachment for an API specified by its + /// identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (attachmentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "attachmentId"); + } + if (attachmentId != null) + { + if (attachmentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "attachmentId", 256); + } + if (attachmentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "attachmentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(attachmentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "attachmentId", "^[^*#&+:<>?]+$"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("attachmentId", attachmentId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Get", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/attachments/{attachmentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{attachmentId}", System.Uri.EscapeDataString(attachmentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Creates a new Attachment for the Issue in an API or updates an existing + /// one. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, IssueAttachmentContract parameters, string ifMatch = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (attachmentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "attachmentId"); + } + if (attachmentId != null) + { + if (attachmentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "attachmentId", 256); + } + if (attachmentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "attachmentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(attachmentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "attachmentId", "^[^*#&+:<>?]+$"); + } + } + if (parameters == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("attachmentId", attachmentId); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("ifMatch", ifMatch); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/attachments/{attachmentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{attachmentId}", System.Uri.EscapeDataString(attachmentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("PUT"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (ifMatch != null) + { + if (_httpRequest.Headers.Contains("If-Match")) + { + _httpRequest.Headers.Remove("If-Match"); + } + _httpRequest.Headers.TryAddWithoutValidation("If-Match", ifMatch); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(parameters != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200 && (int)_statusCode != 201) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + // Deserialize Response + if ((int)_statusCode == 201) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task DeleteWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, string ifMatch, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (attachmentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "attachmentId"); + } + if (attachmentId != null) + { + if (attachmentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "attachmentId", 256); + } + if (attachmentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "attachmentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(attachmentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "attachmentId", "^[^*#&+:<>?]+$"); + } + } + if (ifMatch == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ifMatch"); + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("attachmentId", attachmentId); + tracingParameters.Add("ifMatch", ifMatch); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Delete", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/attachments/{attachmentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{attachmentId}", System.Uri.EscapeDataString(attachmentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("DELETE"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (ifMatch != null) + { + if (_httpRequest.Headers.Contains("If-Match")) + { + _httpRequest.Headers.Remove("If-Match"); + } + _httpRequest.Headers.TryAddWithoutValidation("If-Match", ifMatch); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200 && (int)_statusCode != 204) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListByServiceNextWithHttpMessagesAsync(string nextPageLink, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (nextPageLink == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "nextPageLink"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("nextPageLink", nextPageLink); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "ListByServiceNext", tracingParameters); + } + // Construct URL + string _url = "{nextLink}"; + _url = _url.Replace("{nextLink}", nextPageLink); + List _queryParameters = new List(); + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueAttachmentOperationsExtensions.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueAttachmentOperationsExtensions.cs new file mode 100644 index 000000000000..627bd7b53884 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueAttachmentOperationsExtensions.cs @@ -0,0 +1,399 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Extension methods for ApiIssueAttachmentOperations. + /// + public static partial class ApiIssueAttachmentOperationsExtensions + { + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + public static IPage ListByService(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery)) + { + return operations.ListByServiceAsync(resourceGroupName, serviceName, apiId, issueId, odataQuery).GetAwaiter().GetResult(); + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByServiceAsync(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListByServiceWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets the entity state (Etag) version of the issue Attachment for an API + /// specified by its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + public static ApiIssueAttachmentGetEntityTagHeaders GetEntityTag(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId) + { + return operations.GetEntityTagAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId).GetAwaiter().GetResult(); + } + + /// + /// Gets the entity state (Etag) version of the issue Attachment for an API + /// specified by its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// The cancellation token. + /// + public static async Task GetEntityTagAsync(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetEntityTagWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + + /// + /// Gets the details of the issue Attachment for an API specified by its + /// identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + public static IssueAttachmentContract Get(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId) + { + return operations.GetAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId).GetAwaiter().GetResult(); + } + + /// + /// Gets the details of the issue Attachment for an API specified by its + /// identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// The cancellation token. + /// + public static async Task GetAsync(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Creates a new Attachment for the Issue in an API or updates an existing + /// one. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + public static IssueAttachmentContract CreateOrUpdate(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, IssueAttachmentContract parameters, string ifMatch = default(string)) + { + return operations.CreateOrUpdateAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId, parameters, ifMatch).GetAwaiter().GetResult(); + } + + /// + /// Creates a new Attachment for the Issue in an API or updates an existing + /// one. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// The cancellation token. + /// + public static async Task CreateOrUpdateAsync(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, IssueAttachmentContract parameters, string ifMatch = default(string), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId, parameters, ifMatch, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + public static void Delete(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, string ifMatch) + { + operations.DeleteAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId, ifMatch).GetAwaiter().GetResult(); + } + + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// The cancellation token. + /// + public static async Task DeleteAsync(this IApiIssueAttachmentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, string ifMatch, CancellationToken cancellationToken = default(CancellationToken)) + { + (await operations.DeleteWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, attachmentId, ifMatch, null, cancellationToken).ConfigureAwait(false)).Dispose(); + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static IPage ListByServiceNext(this IApiIssueAttachmentOperations operations, string nextPageLink) + { + return operations.ListByServiceNextAsync(nextPageLink).GetAwaiter().GetResult(); + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByServiceNextAsync(this IApiIssueAttachmentOperations operations, string nextPageLink, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListByServiceNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueCommentOperations.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueCommentOperations.cs new file mode 100644 index 000000000000..7939f70d3de9 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueCommentOperations.cs @@ -0,0 +1,1665 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + + /// + /// ApiIssueCommentOperations operations. + /// + internal partial class ApiIssueCommentOperations : IServiceOperations, IApiIssueCommentOperations + { + /// + /// Initializes a new instance of the ApiIssueCommentOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ApiIssueCommentOperations(ApiManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + Client = client; + } + + /// + /// Gets a reference to the ApiManagementClient + /// + public ApiManagementClient Client { get; private set; } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListByServiceWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("odataQuery", odataQuery); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "ListByService", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/comments").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Gets the entity state (Etag) version of the issue Comment for an API + /// specified by its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetEntityTagWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (commentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "commentId"); + } + if (commentId != null) + { + if (commentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "commentId", 256); + } + if (commentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "commentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(commentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "commentId", "^[^*#&+:<>?]+$"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("commentId", commentId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "GetEntityTag", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/comments/{commentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{commentId}", System.Uri.EscapeDataString(commentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("HEAD"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationHeaderResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Gets the details of the issue Comment for an API specified by its + /// identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (commentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "commentId"); + } + if (commentId != null) + { + if (commentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "commentId", 256); + } + if (commentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "commentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(commentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "commentId", "^[^*#&+:<>?]+$"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("commentId", commentId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Get", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/comments/{commentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{commentId}", System.Uri.EscapeDataString(commentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Creates a new Comment for the Issue in an API or updates an existing one. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, IssueCommentContract parameters, string ifMatch = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (commentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "commentId"); + } + if (commentId != null) + { + if (commentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "commentId", 256); + } + if (commentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "commentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(commentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "commentId", "^[^*#&+:<>?]+$"); + } + } + if (parameters == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("commentId", commentId); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("ifMatch", ifMatch); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/comments/{commentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{commentId}", System.Uri.EscapeDataString(commentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("PUT"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (ifMatch != null) + { + if (_httpRequest.Headers.Contains("If-Match")) + { + _httpRequest.Headers.Remove("If-Match"); + } + _httpRequest.Headers.TryAddWithoutValidation("If-Match", ifMatch); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(parameters != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200 && (int)_statusCode != 201) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + // Deserialize Response + if ((int)_statusCode == 201) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task DeleteWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, string ifMatch, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (commentId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "commentId"); + } + if (commentId != null) + { + if (commentId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "commentId", 256); + } + if (commentId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "commentId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(commentId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "commentId", "^[^*#&+:<>?]+$"); + } + } + if (ifMatch == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ifMatch"); + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("commentId", commentId); + tracingParameters.Add("ifMatch", ifMatch); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Delete", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}/comments/{commentId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{commentId}", System.Uri.EscapeDataString(commentId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("DELETE"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (ifMatch != null) + { + if (_httpRequest.Headers.Contains("If-Match")) + { + _httpRequest.Headers.Remove("If-Match"); + } + _httpRequest.Headers.TryAddWithoutValidation("If-Match", ifMatch); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200 && (int)_statusCode != 204) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListByServiceNextWithHttpMessagesAsync(string nextPageLink, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (nextPageLink == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "nextPageLink"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("nextPageLink", nextPageLink); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "ListByServiceNext", tracingParameters); + } + // Construct URL + string _url = "{nextLink}"; + _url = _url.Replace("{nextLink}", nextPageLink); + List _queryParameters = new List(); + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueCommentOperationsExtensions.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueCommentOperationsExtensions.cs new file mode 100644 index 000000000000..49423cbc8462 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueCommentOperationsExtensions.cs @@ -0,0 +1,397 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Extension methods for ApiIssueCommentOperations. + /// + public static partial class ApiIssueCommentOperationsExtensions + { + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + public static IPage ListByService(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery)) + { + return operations.ListByServiceAsync(resourceGroupName, serviceName, apiId, issueId, odataQuery).GetAwaiter().GetResult(); + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByServiceAsync(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListByServiceWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets the entity state (Etag) version of the issue Comment for an API + /// specified by its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + public static ApiIssueCommentGetEntityTagHeaders GetEntityTag(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId) + { + return operations.GetEntityTagAsync(resourceGroupName, serviceName, apiId, issueId, commentId).GetAwaiter().GetResult(); + } + + /// + /// Gets the entity state (Etag) version of the issue Comment for an API + /// specified by its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// The cancellation token. + /// + public static async Task GetEntityTagAsync(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetEntityTagWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, commentId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + + /// + /// Gets the details of the issue Comment for an API specified by its + /// identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + public static IssueCommentContract Get(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId) + { + return operations.GetAsync(resourceGroupName, serviceName, apiId, issueId, commentId).GetAwaiter().GetResult(); + } + + /// + /// Gets the details of the issue Comment for an API specified by its + /// identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// The cancellation token. + /// + public static async Task GetAsync(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, commentId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Creates a new Comment for the Issue in an API or updates an existing one. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + public static IssueCommentContract CreateOrUpdate(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, IssueCommentContract parameters, string ifMatch = default(string)) + { + return operations.CreateOrUpdateAsync(resourceGroupName, serviceName, apiId, issueId, commentId, parameters, ifMatch).GetAwaiter().GetResult(); + } + + /// + /// Creates a new Comment for the Issue in an API or updates an existing one. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// The cancellation token. + /// + public static async Task CreateOrUpdateAsync(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, IssueCommentContract parameters, string ifMatch = default(string), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, commentId, parameters, ifMatch, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + public static void Delete(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, string ifMatch) + { + operations.DeleteAsync(resourceGroupName, serviceName, apiId, issueId, commentId, ifMatch).GetAwaiter().GetResult(); + } + + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// The cancellation token. + /// + public static async Task DeleteAsync(this IApiIssueCommentOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, string ifMatch, CancellationToken cancellationToken = default(CancellationToken)) + { + (await operations.DeleteWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, commentId, ifMatch, null, cancellationToken).ConfigureAwait(false)).Dispose(); + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static IPage ListByServiceNext(this IApiIssueCommentOperations operations, string nextPageLink) + { + return operations.ListByServiceNextAsync(nextPageLink).GetAwaiter().GetResult(); + } + + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByServiceNextAsync(this IApiIssueCommentOperations operations, string nextPageLink, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListByServiceNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueOperations.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueOperations.cs new file mode 100644 index 000000000000..5cf6f0259519 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueOperations.cs @@ -0,0 +1,1543 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + + /// + /// ApiIssueOperations operations. + /// + internal partial class ApiIssueOperations : IServiceOperations, IApiIssueOperations + { + /// + /// Initializes a new instance of the ApiIssueOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ApiIssueOperations(ApiManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + Client = client; + } + + /// + /// Gets a reference to the ApiManagementClient + /// + public ApiManagementClient Client { get; private set; } + + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListByServiceWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, ODataQuery odataQuery = default(ODataQuery), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("odataQuery", odataQuery); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "ListByService", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Gets the entity state (Etag) version of the Issue for an API specified by + /// its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetEntityTagWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "GetEntityTag", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("HEAD"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationHeaderResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Gets the details of the Issue for an API specified by its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Get", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Creates a new Issue for an API or updates an existing one. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, IssueContract parameters, string ifMatch = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (parameters == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("ifMatch", ifMatch); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("PUT"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (ifMatch != null) + { + if (_httpRequest.Headers.Contains("If-Match")) + { + _httpRequest.Headers.Remove("If-Match"); + } + _httpRequest.Headers.TryAddWithoutValidation("If-Match", ifMatch); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(parameters != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200 && (int)_statusCode != 201) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + // Deserialize Response + if ((int)_statusCode == 201) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Deletes the specified Issue from an API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task DeleteWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string ifMatch, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (serviceName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "serviceName"); + } + if (serviceName != null) + { + if (serviceName.Length > 50) + { + throw new ValidationException(ValidationRules.MaxLength, "serviceName", 50); + } + if (serviceName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "serviceName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(serviceName, "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$")) + { + throw new ValidationException(ValidationRules.Pattern, "serviceName", "^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"); + } + } + if (apiId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "apiId"); + } + if (apiId != null) + { + if (apiId.Length > 80) + { + throw new ValidationException(ValidationRules.MaxLength, "apiId", 80); + } + if (apiId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "apiId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(apiId, "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)")) + { + throw new ValidationException(ValidationRules.Pattern, "apiId", "(^[\\w]+$)|(^[\\w][\\w\\-]+[\\w]$)"); + } + } + if (issueId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "issueId"); + } + if (issueId != null) + { + if (issueId.Length > 256) + { + throw new ValidationException(ValidationRules.MaxLength, "issueId", 256); + } + if (issueId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "issueId", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(issueId, "^[^*#&+:<>?]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "issueId", "^[^*#&+:<>?]+$"); + } + } + if (ifMatch == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ifMatch"); + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("serviceName", serviceName); + tracingParameters.Add("apiId", apiId); + tracingParameters.Add("issueId", issueId); + tracingParameters.Add("ifMatch", ifMatch); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Delete", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/issues/{issueId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{serviceName}", System.Uri.EscapeDataString(serviceName)); + _url = _url.Replace("{apiId}", System.Uri.EscapeDataString(apiId)); + _url = _url.Replace("{issueId}", System.Uri.EscapeDataString(issueId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("DELETE"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (ifMatch != null) + { + if (_httpRequest.Headers.Contains("If-Match")) + { + _httpRequest.Headers.Remove("If-Match"); + } + _httpRequest.Headers.TryAddWithoutValidation("If-Match", ifMatch); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200 && (int)_statusCode != 204) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListByServiceNextWithHttpMessagesAsync(string nextPageLink, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (nextPageLink == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "nextPageLink"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("nextPageLink", nextPageLink); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "ListByServiceNext", tracingParameters); + } + // Construct URL + string _url = "{nextLink}"; + _url = _url.Replace("{nextLink}", nextPageLink); + List _queryParameters = new List(); + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + ErrorResponse _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueOperationsExtensions.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueOperationsExtensions.cs new file mode 100644 index 000000000000..a4c349a0db2b --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiIssueOperationsExtensions.cs @@ -0,0 +1,363 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Extension methods for ApiIssueOperations. + /// + public static partial class ApiIssueOperationsExtensions + { + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + public static IPage ListByService(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, ODataQuery odataQuery = default(ODataQuery)) + { + return operations.ListByServiceAsync(resourceGroupName, serviceName, apiId, odataQuery).GetAwaiter().GetResult(); + } + + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByServiceAsync(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, ODataQuery odataQuery = default(ODataQuery), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListByServiceWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets the entity state (Etag) version of the Issue for an API specified by + /// its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + public static ApiIssueGetEntityTagHeaders GetEntityTag(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId) + { + return operations.GetEntityTagAsync(resourceGroupName, serviceName, apiId, issueId).GetAwaiter().GetResult(); + } + + /// + /// Gets the entity state (Etag) version of the Issue for an API specified by + /// its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// The cancellation token. + /// + public static async Task GetEntityTagAsync(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetEntityTagWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + + /// + /// Gets the details of the Issue for an API specified by its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + public static IssueContract Get(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId) + { + return operations.GetAsync(resourceGroupName, serviceName, apiId, issueId).GetAwaiter().GetResult(); + } + + /// + /// Gets the details of the Issue for an API specified by its identifier. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// The cancellation token. + /// + public static async Task GetAsync(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Creates a new Issue for an API or updates an existing one. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + public static IssueContract CreateOrUpdate(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, IssueContract parameters, string ifMatch = default(string)) + { + return operations.CreateOrUpdateAsync(resourceGroupName, serviceName, apiId, issueId, parameters, ifMatch).GetAwaiter().GetResult(); + } + + /// + /// Creates a new Issue for an API or updates an existing one. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// The cancellation token. + /// + public static async Task CreateOrUpdateAsync(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, IssueContract parameters, string ifMatch = default(string), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, parameters, ifMatch, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Deletes the specified Issue from an API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + public static void Delete(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string ifMatch) + { + operations.DeleteAsync(resourceGroupName, serviceName, apiId, issueId, ifMatch).GetAwaiter().GetResult(); + } + + /// + /// Deletes the specified Issue from an API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management service + /// instance. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity state from + /// the header response of the GET request or it should be * for unconditional + /// update. + /// + /// + /// The cancellation token. + /// + public static async Task DeleteAsync(this IApiIssueOperations operations, string resourceGroupName, string serviceName, string apiId, string issueId, string ifMatch, CancellationToken cancellationToken = default(CancellationToken)) + { + (await operations.DeleteWithHttpMessagesAsync(resourceGroupName, serviceName, apiId, issueId, ifMatch, null, cancellationToken).ConfigureAwait(false)).Dispose(); + } + + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static IPage ListByServiceNext(this IApiIssueOperations operations, string nextPageLink) + { + return operations.ListByServiceNextAsync(nextPageLink).GetAwaiter().GetResult(); + } + + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByServiceNextAsync(this IApiIssueOperations operations, string nextPageLink, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListByServiceNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiManagementClient.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiManagementClient.cs index da30b9c8e1ae..b15bb7cff979 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiManagementClient.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/ApiManagementClient.cs @@ -140,6 +140,21 @@ public partial class ApiManagementClient : ServiceClient, I /// public virtual IApiDiagnosticLoggerOperations ApiDiagnosticLogger { get; private set; } + /// + /// Gets the IApiIssueOperations. + /// + public virtual IApiIssueOperations ApiIssue { get; private set; } + + /// + /// Gets the IApiIssueCommentOperations. + /// + public virtual IApiIssueCommentOperations ApiIssueComment { get; private set; } + + /// + /// Gets the IApiIssueAttachmentOperations. + /// + public virtual IApiIssueAttachmentOperations ApiIssueAttachment { get; private set; } + /// /// Gets the IAuthorizationServerOperations. /// @@ -569,6 +584,9 @@ private void Initialize() ApiSchema = new ApiSchemaOperations(this); ApiDiagnostic = new ApiDiagnosticOperations(this); ApiDiagnosticLogger = new ApiDiagnosticLoggerOperations(this); + ApiIssue = new ApiIssueOperations(this); + ApiIssueComment = new ApiIssueCommentOperations(this); + ApiIssueAttachment = new ApiIssueAttachmentOperations(this); AuthorizationServer = new AuthorizationServerOperations(this); Backend = new BackendOperations(this); Certificate = new CertificateOperations(this); diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueAttachmentOperations.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueAttachmentOperations.cs new file mode 100644 index 000000000000..c05d4c9865ca --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueAttachmentOperations.cs @@ -0,0 +1,244 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using System.Collections; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + /// + /// ApiIssueAttachmentOperations operations. + /// + public partial interface IApiIssueAttachmentOperations + { + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListByServiceWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the entity state (Etag) version of the issue Attachment for an + /// API specified by its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the + /// current Issue. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetEntityTagWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the details of the issue Attachment for an API specified by + /// its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the + /// current Issue. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Creates a new Attachment for the Issue in an API or updates an + /// existing one. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the + /// current Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity + /// state from the header response of the GET request or it should be * + /// for unconditional update. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, IssueAttachmentContract parameters, string ifMatch = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Attachment identifier within an Issue. Must be unique in the + /// current Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity + /// state from the header response of the GET request or it should be * + /// for unconditional update. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task DeleteWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string attachmentId, string ifMatch, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListByServiceNextWithHttpMessagesAsync(string nextPageLink, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueCommentOperations.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueCommentOperations.cs new file mode 100644 index 000000000000..9ae74dcf0518 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueCommentOperations.cs @@ -0,0 +1,244 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using System.Collections; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + /// + /// ApiIssueCommentOperations operations. + /// + public partial interface IApiIssueCommentOperations + { + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListByServiceWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, ODataQuery odataQuery = default(ODataQuery), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the entity state (Etag) version of the issue Comment for an + /// API specified by its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current + /// Issue. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetEntityTagWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the details of the issue Comment for an API specified by its + /// identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current + /// Issue. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Creates a new Comment for the Issue in an API or updates an + /// existing one. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current + /// Issue. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity + /// state from the header response of the GET request or it should be * + /// for unconditional update. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, IssueCommentContract parameters, string ifMatch = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Deletes the specified comment from an Issue. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Comment identifier within an Issue. Must be unique in the current + /// Issue. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity + /// state from the header response of the GET request or it should be * + /// for unconditional update. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task DeleteWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string commentId, string ifMatch, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Lists all comments for the Issue assosiated with the specified API. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListByServiceNextWithHttpMessagesAsync(string nextPageLink, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueOperations.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueOperations.cs new file mode 100644 index 000000000000..b257306d36dd --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiIssueOperations.cs @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement +{ + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Microsoft.Rest.Azure.OData; + using Models; + using System.Collections; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + /// + /// ApiIssueOperations operations. + /// + public partial interface IApiIssueOperations + { + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListByServiceWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, ODataQuery odataQuery = default(ODataQuery), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the entity state (Etag) version of the Issue for an API + /// specified by its identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetEntityTagWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the details of the Issue for an API specified by its + /// identifier. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Creates a new Issue for an API or updates an existing one. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Create parameters. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity + /// state from the header response of the GET request or it should be * + /// for unconditional update. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, IssueContract parameters, string ifMatch = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Deletes the specified Issue from an API. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the API Management service. + /// + /// + /// API identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// Issue identifier. Must be unique in the current API Management + /// service instance. + /// + /// + /// ETag of the Issue Entity. ETag should match the current entity + /// state from the header response of the GET request or it should be * + /// for unconditional update. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task DeleteWithHttpMessagesAsync(string resourceGroupName, string serviceName, string apiId, string issueId, string ifMatch, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Lists all issues assosiated with the specified API. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListByServiceNextWithHttpMessagesAsync(string nextPageLink, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiManagementClient.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiManagementClient.cs index 10682ca7a2f8..4d3fcd44cfcd 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiManagementClient.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/IApiManagementClient.cs @@ -135,6 +135,21 @@ public partial interface IApiManagementClient : System.IDisposable /// IApiDiagnosticLoggerOperations ApiDiagnosticLogger { get; } + /// + /// Gets the IApiIssueOperations. + /// + IApiIssueOperations ApiIssue { get; } + + /// + /// Gets the IApiIssueCommentOperations. + /// + IApiIssueCommentOperations ApiIssueComment { get; } + + /// + /// Gets the IApiIssueAttachmentOperations. + /// + IApiIssueAttachmentOperations ApiIssueAttachment { get; } + /// /// Gets the IAuthorizationServerOperations. /// diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/AdditionalLocation.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/AdditionalLocation.cs index 7e4b33fe8acf..7fefcb4ade13 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/AdditionalLocation.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/AdditionalLocation.cs @@ -36,17 +36,23 @@ public AdditionalLocation() /// among Azure Data center regions. /// SKU properties of the API Management /// service. - /// Static IP addresses of the - /// location's virtual machines. + /// Public Static Load Balanced IP + /// addresses of the API Management service in the additional location. + /// Available only for Basic, Standard and Premium SKU. + /// Private Static Load Balanced IP + /// addresses of the API Management service which is deployed in an + /// Internal Virtual Network in a particular additional location. + /// Available only for Basic, Standard and Premium SKU. /// Virtual network /// configuration for the location. /// Gateway URL of the API Management /// service in the Region. - public AdditionalLocation(string location, ApiManagementServiceSkuProperties sku, IList publicIPAddresses = default(IList), VirtualNetworkConfiguration virtualNetworkConfiguration = default(VirtualNetworkConfiguration), string gatewayRegionalUrl = default(string)) + public AdditionalLocation(string location, ApiManagementServiceSkuProperties sku, IList publicIPAddresses = default(IList), IList privateIPAddresses = default(IList), VirtualNetworkConfiguration virtualNetworkConfiguration = default(VirtualNetworkConfiguration), string gatewayRegionalUrl = default(string)) { Location = location; Sku = sku; PublicIPAddresses = publicIPAddresses; + PrivateIPAddresses = privateIPAddresses; VirtualNetworkConfiguration = virtualNetworkConfiguration; GatewayRegionalUrl = gatewayRegionalUrl; CustomInit(); @@ -71,11 +77,22 @@ public AdditionalLocation() public ApiManagementServiceSkuProperties Sku { get; set; } /// - /// Gets static IP addresses of the location's virtual machines. + /// Gets public Static Load Balanced IP addresses of the API Management + /// service in the additional location. Available only for Basic, + /// Standard and Premium SKU. /// [JsonProperty(PropertyName = "publicIPAddresses")] public IList PublicIPAddresses { get; private set; } + /// + /// Gets private Static Load Balanced IP addresses of the API + /// Management service which is deployed in an Internal Virtual Network + /// in a particular additional location. Available only for Basic, + /// Standard and Premium SKU. + /// + [JsonProperty(PropertyName = "privateIPAddresses")] + public IList PrivateIPAddresses { get; private set; } + /// /// Gets or sets virtual network configuration for the location. /// diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueAttachmentGetEntityTagHeaders.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueAttachmentGetEntityTagHeaders.cs new file mode 100644 index 000000000000..dfb40e20b020 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueAttachmentGetEntityTagHeaders.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for GetEntityTag operation. + /// + public partial class ApiIssueAttachmentGetEntityTagHeaders + { + /// + /// Initializes a new instance of the + /// ApiIssueAttachmentGetEntityTagHeaders class. + /// + public ApiIssueAttachmentGetEntityTagHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the + /// ApiIssueAttachmentGetEntityTagHeaders class. + /// + /// Current entity state version. Should be treated + /// as opaque and used to make conditional HTTP requests. + public ApiIssueAttachmentGetEntityTagHeaders(string eTag = default(string)) + { + ETag = eTag; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets current entity state version. Should be treated as + /// opaque and used to make conditional HTTP requests. + /// + [JsonProperty(PropertyName = "ETag")] + public string ETag { get; set; } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueAttachmentGetHeaders.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueAttachmentGetHeaders.cs new file mode 100644 index 000000000000..0c0a7c7c0cd3 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueAttachmentGetHeaders.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for Get operation. + /// + public partial class ApiIssueAttachmentGetHeaders + { + /// + /// Initializes a new instance of the ApiIssueAttachmentGetHeaders + /// class. + /// + public ApiIssueAttachmentGetHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the ApiIssueAttachmentGetHeaders + /// class. + /// + /// Current entity state version. Should be treated + /// as opaque and used to make conditional HTTP requests. + public ApiIssueAttachmentGetHeaders(string eTag = default(string)) + { + ETag = eTag; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets current entity state version. Should be treated as + /// opaque and used to make conditional HTTP requests. + /// + [JsonProperty(PropertyName = "ETag")] + public string ETag { get; set; } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueCommentGetEntityTagHeaders.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueCommentGetEntityTagHeaders.cs new file mode 100644 index 000000000000..7e5d26fca916 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueCommentGetEntityTagHeaders.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for GetEntityTag operation. + /// + public partial class ApiIssueCommentGetEntityTagHeaders + { + /// + /// Initializes a new instance of the + /// ApiIssueCommentGetEntityTagHeaders class. + /// + public ApiIssueCommentGetEntityTagHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the + /// ApiIssueCommentGetEntityTagHeaders class. + /// + /// Current entity state version. Should be treated + /// as opaque and used to make conditional HTTP requests. + public ApiIssueCommentGetEntityTagHeaders(string eTag = default(string)) + { + ETag = eTag; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets current entity state version. Should be treated as + /// opaque and used to make conditional HTTP requests. + /// + [JsonProperty(PropertyName = "ETag")] + public string ETag { get; set; } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueCommentGetHeaders.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueCommentGetHeaders.cs new file mode 100644 index 000000000000..9e61c0487082 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueCommentGetHeaders.cs @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for Get operation. + /// + public partial class ApiIssueCommentGetHeaders + { + /// + /// Initializes a new instance of the ApiIssueCommentGetHeaders class. + /// + public ApiIssueCommentGetHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the ApiIssueCommentGetHeaders class. + /// + /// Current entity state version. Should be treated + /// as opaque and used to make conditional HTTP requests. + public ApiIssueCommentGetHeaders(string eTag = default(string)) + { + ETag = eTag; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets current entity state version. Should be treated as + /// opaque and used to make conditional HTTP requests. + /// + [JsonProperty(PropertyName = "ETag")] + public string ETag { get; set; } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueGetEntityTagHeaders.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueGetEntityTagHeaders.cs new file mode 100644 index 000000000000..4859410a93dc --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueGetEntityTagHeaders.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for GetEntityTag operation. + /// + public partial class ApiIssueGetEntityTagHeaders + { + /// + /// Initializes a new instance of the ApiIssueGetEntityTagHeaders + /// class. + /// + public ApiIssueGetEntityTagHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the ApiIssueGetEntityTagHeaders + /// class. + /// + /// Current entity state version. Should be treated + /// as opaque and used to make conditional HTTP requests. + public ApiIssueGetEntityTagHeaders(string eTag = default(string)) + { + ETag = eTag; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets current entity state version. Should be treated as + /// opaque and used to make conditional HTTP requests. + /// + [JsonProperty(PropertyName = "ETag")] + public string ETag { get; set; } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueGetHeaders.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueGetHeaders.cs new file mode 100644 index 000000000000..41bb3d0ecf8f --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiIssueGetHeaders.cs @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for Get operation. + /// + public partial class ApiIssueGetHeaders + { + /// + /// Initializes a new instance of the ApiIssueGetHeaders class. + /// + public ApiIssueGetHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the ApiIssueGetHeaders class. + /// + /// Current entity state version. Should be treated + /// as opaque and used to make conditional HTTP requests. + public ApiIssueGetHeaders(string eTag = default(string)) + { + ETag = eTag; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets current entity state version. Should be treated as + /// opaque and used to make conditional HTTP requests. + /// + [JsonProperty(PropertyName = "ETag")] + public string ETag { get; set; } + + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceBaseProperties.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceBaseProperties.cs index b207423036ba..174deef1fbc1 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceBaseProperties.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceBaseProperties.cs @@ -59,12 +59,12 @@ public ApiManagementServiceBaseProperties() /// Custom hostname configuration /// of the API Management service. /// Public Static Load Balanced IP - /// addresses of the API Management service. Available only for Basic, - /// Standard and Premium SKU. + /// addresses of the API Management service in Primary region. + /// Available only for Basic, Standard and Premium SKU. /// Private Static Load Balanced IP - /// addresses of the API Management service which is deployed in an - /// Internal Virtual Network. Available only for Basic, Standard and - /// Premium SKU. + /// addresses of the API Management service in Primary region which is + /// deployed in an Internal Virtual Network. Available only for Basic, + /// Standard and Premium SKU. /// Virtual network /// configuration of the API Management service. /// Additional datacenter locations @@ -187,15 +187,17 @@ public ApiManagementServiceBaseProperties() /// /// Gets public Static Load Balanced IP addresses of the API Management - /// service. Available only for Basic, Standard and Premium SKU. + /// service in Primary region. Available only for Basic, Standard and + /// Premium SKU. /// [JsonProperty(PropertyName = "publicIPAddresses")] public IList PublicIPAddresses { get; private set; } /// /// Gets private Static Load Balanced IP addresses of the API - /// Management service which is deployed in an Internal Virtual - /// Network. Available only for Basic, Standard and Premium SKU. + /// Management service in Primary region which is deployed in an + /// Internal Virtual Network. Available only for Basic, Standard and + /// Premium SKU. /// [JsonProperty(PropertyName = "privateIPAddresses")] public IList PrivateIPAddresses { get; private set; } diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceResource.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceResource.cs index fca3fba48a49..553683ea6906 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceResource.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceResource.cs @@ -71,12 +71,12 @@ public ApiManagementServiceResource() /// Custom hostname configuration /// of the API Management service. /// Public Static Load Balanced IP - /// addresses of the API Management service. Available only for Basic, - /// Standard and Premium SKU. + /// addresses of the API Management service in Primary region. + /// Available only for Basic, Standard and Premium SKU. /// Private Static Load Balanced IP - /// addresses of the API Management service which is deployed in an - /// Internal Virtual Network. Available only for Basic, Standard and - /// Premium SKU. + /// addresses of the API Management service in Primary region which is + /// deployed in an Internal Virtual Network. Available only for Basic, + /// Standard and Premium SKU. /// Virtual network /// configuration of the API Management service. /// Additional datacenter locations @@ -209,15 +209,17 @@ public ApiManagementServiceResource() /// /// Gets public Static Load Balanced IP addresses of the API Management - /// service. Available only for Basic, Standard and Premium SKU. + /// service in Primary region. Available only for Basic, Standard and + /// Premium SKU. /// [JsonProperty(PropertyName = "properties.publicIPAddresses")] public IList PublicIPAddresses { get; private set; } /// /// Gets private Static Load Balanced IP addresses of the API - /// Management service which is deployed in an Internal Virtual - /// Network. Available only for Basic, Standard and Premium SKU. + /// Management service in Primary region which is deployed in an + /// Internal Virtual Network. Available only for Basic, Standard and + /// Premium SKU. /// [JsonProperty(PropertyName = "properties.privateIPAddresses")] public IList PrivateIPAddresses { get; private set; } diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceUpdateParameters.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceUpdateParameters.cs index e669c9df8161..a9733578f98a 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceUpdateParameters.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/ApiManagementServiceUpdateParameters.cs @@ -66,12 +66,12 @@ public ApiManagementServiceUpdateParameters() /// Custom hostname configuration /// of the API Management service. /// Public Static Load Balanced IP - /// addresses of the API Management service. Available only for Basic, - /// Standard and Premium SKU. + /// addresses of the API Management service in Primary region. + /// Available only for Basic, Standard and Premium SKU. /// Private Static Load Balanced IP - /// addresses of the API Management service which is deployed in an - /// Internal Virtual Network. Available only for Basic, Standard and - /// Premium SKU. + /// addresses of the API Management service in Primary region which is + /// deployed in an Internal Virtual Network. Available only for Basic, + /// Standard and Premium SKU. /// Virtual network /// configuration of the API Management service. /// Additional datacenter locations @@ -207,15 +207,17 @@ public ApiManagementServiceUpdateParameters() /// /// Gets public Static Load Balanced IP addresses of the API Management - /// service. Available only for Basic, Standard and Premium SKU. + /// service in Primary region. Available only for Basic, Standard and + /// Premium SKU. /// [JsonProperty(PropertyName = "properties.publicIPAddresses")] public IList PublicIPAddresses { get; private set; } /// /// Gets private Static Load Balanced IP addresses of the API - /// Management service which is deployed in an Internal Virtual - /// Network. Available only for Basic, Standard and Premium SKU. + /// Management service in Primary region which is deployed in an + /// Internal Virtual Network. Available only for Basic, Standard and + /// Premium SKU. /// [JsonProperty(PropertyName = "properties.privateIPAddresses")] public IList PrivateIPAddresses { get; private set; } diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueAttachmentContract.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueAttachmentContract.cs new file mode 100644 index 000000000000..bc661097459e --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueAttachmentContract.cs @@ -0,0 +1,102 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Microsoft.Rest; + using Microsoft.Rest.Serialization; + using Newtonsoft.Json; + using System.Linq; + + /// + /// Issue Attachment Contract details. + /// + [Rest.Serialization.JsonTransformation] + public partial class IssueAttachmentContract : Resource + { + /// + /// Initializes a new instance of the IssueAttachmentContract class. + /// + public IssueAttachmentContract() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the IssueAttachmentContract class. + /// + /// Filename by which the binary data will be + /// saved. + /// Either 'link' if content is provided + /// via an HTTP link or the MIME type of the Base64-encoded binary data + /// provided in the 'content' property. + /// An HTTP link or Base64-encoded binary + /// data. + /// Resource ID. + /// Resource name. + /// Resource type for API Management + /// resource. + public IssueAttachmentContract(string title, string contentFormat, string content, string id = default(string), string name = default(string), string type = default(string)) + : base(id, name, type) + { + Title = title; + ContentFormat = contentFormat; + Content = content; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets filename by which the binary data will be saved. + /// + [JsonProperty(PropertyName = "properties.title")] + public string Title { get; set; } + + /// + /// Gets or sets either 'link' if content is provided via an HTTP link + /// or the MIME type of the Base64-encoded binary data provided in the + /// 'content' property. + /// + [JsonProperty(PropertyName = "properties.contentFormat")] + public string ContentFormat { get; set; } + + /// + /// Gets or sets an HTTP link or Base64-encoded binary data. + /// + [JsonProperty(PropertyName = "properties.content")] + public string Content { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Title == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Title"); + } + if (ContentFormat == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ContentFormat"); + } + if (Content == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Content"); + } + } + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueCommentContract.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueCommentContract.cs new file mode 100644 index 000000000000..1361c97e8141 --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueCommentContract.cs @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Microsoft.Rest; + using Microsoft.Rest.Serialization; + using Newtonsoft.Json; + using System.Linq; + + /// + /// Issue Comment Contract details. + /// + [Rest.Serialization.JsonTransformation] + public partial class IssueCommentContract : Resource + { + /// + /// Initializes a new instance of the IssueCommentContract class. + /// + public IssueCommentContract() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the IssueCommentContract class. + /// + /// Comment text. + /// A resource identifier for the user who left + /// the comment. + /// Resource ID. + /// Resource name. + /// Resource type for API Management + /// resource. + /// Date and time when the comment was + /// created. + public IssueCommentContract(string text, string userId, string id = default(string), string name = default(string), string type = default(string), System.DateTime? createdDate = default(System.DateTime?)) + : base(id, name, type) + { + Text = text; + CreatedDate = createdDate; + UserId = userId; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets comment text. + /// + [JsonProperty(PropertyName = "properties.text")] + public string Text { get; set; } + + /// + /// Gets or sets date and time when the comment was created. + /// + [JsonProperty(PropertyName = "properties.createdDate")] + public System.DateTime? CreatedDate { get; set; } + + /// + /// Gets or sets a resource identifier for the user who left the + /// comment. + /// + [JsonProperty(PropertyName = "properties.userId")] + public string UserId { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Text == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Text"); + } + if (UserId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "UserId"); + } + } + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueContract.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueContract.cs new file mode 100644 index 000000000000..3b610a66847b --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/IssueContract.cs @@ -0,0 +1,126 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + using Microsoft.Rest; + using Microsoft.Rest.Serialization; + using Newtonsoft.Json; + using System.Linq; + + /// + /// Issue Contract details. + /// + [Rest.Serialization.JsonTransformation] + public partial class IssueContract : Resource + { + /// + /// Initializes a new instance of the IssueContract class. + /// + public IssueContract() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the IssueContract class. + /// + /// The issue title. + /// Text describing the issue. + /// A resource identifier for the user created the + /// issue. + /// Resource ID. + /// Resource name. + /// Resource type for API Management + /// resource. + /// Date and time when the issue was + /// created. + /// Status of the issue. Possible values include: + /// 'proposed', 'open', 'removed', 'resolved', 'closed' + /// A resource identifier for the API the issue was + /// created for. + public IssueContract(string title, string description, string userId, string id = default(string), string name = default(string), string type = default(string), System.DateTime? createdDate = default(System.DateTime?), string state = default(string), string apiId = default(string)) + : base(id, name, type) + { + Title = title; + Description = description; + CreatedDate = createdDate; + State = state; + UserId = userId; + ApiId = apiId; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets the issue title. + /// + [JsonProperty(PropertyName = "properties.title")] + public string Title { get; set; } + + /// + /// Gets or sets text describing the issue. + /// + [JsonProperty(PropertyName = "properties.description")] + public string Description { get; set; } + + /// + /// Gets or sets date and time when the issue was created. + /// + [JsonProperty(PropertyName = "properties.createdDate")] + public System.DateTime? CreatedDate { get; set; } + + /// + /// Gets or sets status of the issue. Possible values include: + /// 'proposed', 'open', 'removed', 'resolved', 'closed' + /// + [JsonProperty(PropertyName = "properties.state")] + public string State { get; set; } + + /// + /// Gets or sets a resource identifier for the user created the issue. + /// + [JsonProperty(PropertyName = "properties.userId")] + public string UserId { get; set; } + + /// + /// Gets or sets a resource identifier for the API the issue was + /// created for. + /// + [JsonProperty(PropertyName = "properties.apiId")] + public string ApiId { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Title == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Title"); + } + if (Description == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Description"); + } + if (UserId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "UserId"); + } + } + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContentFormat.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContentFormat.cs index 5fe0576b4bbe..ad9b69f2985f 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContentFormat.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContentFormat.cs @@ -25,5 +25,15 @@ public static class PolicyContentFormat /// from the API Management service. /// public const string XmlLink = "xml-link"; + /// + /// The contents are inline and Content type is a non XML encoded + /// policy document. + /// + public const string Rawxml = "rawxml"; + /// + /// The policy document is not Xml encoded and is hosted on a http + /// endpoint accessible from the API Management service. + /// + public const string RawxmlLink = "rawxml-link"; } } diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContract.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContract.cs index 6218f2a913e7..f1438a631a52 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContract.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/PolicyContract.cs @@ -39,7 +39,7 @@ public PolicyContract() /// Resource type for API Management /// resource. /// Format of the policyContent. Possible - /// values include: 'xml', 'xml-link' + /// values include: 'xml', 'xml-link', 'rawxml', 'rawxml-link' public PolicyContract(string policyContent, string id = default(string), string name = default(string), string type = default(string), string contentFormat = default(string)) : base(id, name, type) { @@ -61,7 +61,7 @@ public PolicyContract() /// /// Gets or sets format of the policyContent. Possible values include: - /// 'xml', 'xml-link' + /// 'xml', 'xml-link', 'rawxml', 'rawxml-link' /// [JsonProperty(PropertyName = "properties.contentFormat")] public string ContentFormat { get; set; } diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/State.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/State.cs new file mode 100644 index 000000000000..35f48d9c108e --- /dev/null +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/Models/State.cs @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.ApiManagement.Models +{ + + /// + /// Defines values for State. + /// + public static class State + { + /// + /// The issue is proposed. + /// + public const string Proposed = "proposed"; + /// + /// The issue is opened. + /// + public const string Open = "open"; + /// + /// The issue was removed. + /// + public const string Removed = "removed"; + /// + /// The issue is now resolved. + /// + public const string Resolved = "resolved"; + /// + /// The issue was closed. + /// + public const string Closed = "closed"; + } +} diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/SdkInfo_ApiManagementClient.cs b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/SdkInfo_ApiManagementClient.cs index b792b64c0fe5..ce3e6df563e9 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Generated/SdkInfo_ApiManagementClient.cs +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Generated/SdkInfo_ApiManagementClient.cs @@ -15,6 +15,9 @@ public static IEnumerable> ApiInfo_ApiManagementCl new Tuple("ApiManagement", "ApiDiagnostic", "2018-01-01"), new Tuple("ApiManagement", "ApiDiagnosticLogger", "2018-01-01"), new Tuple("ApiManagement", "ApiExport", "2018-01-01"), + new Tuple("ApiManagement", "ApiIssue", "2018-01-01"), + new Tuple("ApiManagement", "ApiIssueAttachment", "2018-01-01"), + new Tuple("ApiManagement", "ApiIssueComment", "2018-01-01"), new Tuple("ApiManagement", "ApiManagementOperations", "2018-01-01"), new Tuple("ApiManagement", "ApiManagementService", "2018-01-01"), new Tuple("ApiManagement", "ApiOperation", "2018-01-01"), diff --git a/src/SDKs/ApiManagement/Management.ApiManagement/Microsoft.Azure.Management.ApiManagement.csproj b/src/SDKs/ApiManagement/Management.ApiManagement/Microsoft.Azure.Management.ApiManagement.csproj index df8638638c54..2e8c7f3d9e81 100644 --- a/src/SDKs/ApiManagement/Management.ApiManagement/Microsoft.Azure.Management.ApiManagement.csproj +++ b/src/SDKs/ApiManagement/Management.ApiManagement/Microsoft.Azure.Management.ApiManagement.csproj @@ -8,7 +8,7 @@ Provides ApiManagement management capabilities for Microsoft Azure. Microsoft Azure API Management Management Microsoft.Azure.Management.ApiManagement - 4.0.0-preview + 4.0.1-preview Microsoft Azure ApiManagement management;API Management; Refer https://aka.ms/apimdotnetsdkchangelog for release notes. diff --git a/src/SDKs/ApiManagement/changelog.md b/src/SDKs/ApiManagement/changelog.md index 6ccb1894a24c..71176ab03fbd 100644 --- a/src/SDKs/ApiManagement/changelog.md +++ b/src/SDKs/ApiManagement/changelog.md @@ -1,8 +1,20 @@ ## Microsoft.Azure.Management.ApiManagment release notes +### Changes in 4.0.1-preview + +*** Resource Management APIs *** + +- Added missing privateIP address in Additional Location + +*** Management APIs **** + +- Added support for Issue, Issue Comments and Issue Attachments +- Added support for accepting non-Xml Encoded policies. + ### Changes in 4.0.0-preview **Notes** + *** Resource Management APIs *** - Added support for Basic Sku - Added support for Intermediate Certificates diff --git a/src/SDKs/_metadata/apimanagement_resource-manager.txt b/src/SDKs/_metadata/apimanagement_resource-manager.txt index 72f9171c1e49..15b534878195 100644 --- a/src/SDKs/_metadata/apimanagement_resource-manager.txt +++ b/src/SDKs/_metadata/apimanagement_resource-manager.txt @@ -1,11 +1,11 @@ -2018-03-09 19:23:44 UTC +2018-04-19 16:54:10 UTC 1) azure-rest-api-specs repository information GitHub user: Azure Branch: master -Commit: 28a310778e29ef2ef00106ed2536925cb11378a0 +Commit: 11af044d47f8af8cccfc3f8840f5f5a92b41be04 2) AutoRest information Requested version: latest -Bootstrapper version: C:\Users\sasolank\AppData\Roaming\npm `-- autorest@2.0.4245 +Bootstrapper version: C:\Users\Sasolank\AppData\Roaming\npm `-- autorest@2.0.4262 Latest installed version: