<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: shailugit</title>
    <description>The latest articles on DEV Community by shailugit (@shailugit).</description>
    <link>https://dev.to/shailugit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F329018%2F9c502e58-43f5-4759-a48a-1bbc10df44f9.png</url>
      <title>DEV Community: shailugit</title>
      <link>https://dev.to/shailugit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shailugit"/>
    <language>en</language>
    <item>
      <title>Azure API Management - Deploy gRPC API on Azure API management using self hosted gateway</title>
      <dc:creator>shailugit</dc:creator>
      <pubDate>Sun, 31 May 2026 03:25:05 +0000</pubDate>
      <link>https://dev.to/shailugit/azure-api-management-deploy-grpc-api-on-azure-api-management-using-self-hosted-gateway-3031</link>
      <guid>https://dev.to/shailugit/azure-api-management-deploy-grpc-api-on-azure-api-management-using-self-hosted-gateway-3031</guid>
      <description>&lt;p&gt;This is a complete guide with steps by step process to deploy the gRPC and how to use Azure API Management to import the gRPC API.&lt;br&gt;
It cover step‑by‑step guide to deploying a gRPC API on Azure API Management (APIM), grounded in the Microsoft documentation and a real-world deployment workflow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: This post is published already in GITHUB here.   &lt;a href="https://github.com/shailugit/apimGrpc/blob/main/README.md" rel="noopener noreferrer"&gt;https://github.com/shailugit/apimGrpc/blob/main/README.md&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The API Management can expose gRPC services, but with important constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIM supports gRPC by importing a .proto file and forwarding calls to a gRPC backend. &lt;/li&gt;
&lt;li&gt;gRPC requires HTTP/2 end‑to‑end.&lt;/li&gt;
&lt;li&gt;gRPC APIs are supported in Self-hosted gateway and not supported in APIM v2 tiers. &lt;/li&gt;
&lt;li&gt;You can't use the test console to test gRPC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The major steps claissfied in two major steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating a gRPC server&lt;/li&gt;
&lt;li&gt;Calling the gPRC application using APIM&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Creating gRPC Application
&lt;/h3&gt;

&lt;p&gt;Typical backend deployment steps include the following&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a .NET gRPC server application&lt;/li&gt;
&lt;li&gt;Create a .NET gRPC client application&lt;/li&gt;
&lt;li&gt;Test the setup locally &lt;/li&gt;
&lt;li&gt;Publish the .NET gRPC server to Azure WebApp and verify the service works directly over HTTPS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step-1 &lt;br&gt;
As a first step we will be building a .NET gRPC server application. &lt;br&gt;
You can skip this step in case you already have gRPC server application.&lt;br&gt;
If you would like to view .NET Core sample used for this sample project, please visit &lt;a href="https://github.com/shailugit/GrpcServer" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Step-2&lt;br&gt;
As a second step we will be building a .NET gRPC client application. You can skip this step in case you already have gRPC client.&lt;br&gt;
If you would like to view .NET Core client used for this sample project, please visit the below &lt;a href="https://github.com/shailugit/GrpcClient" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Step-3&lt;br&gt;
Once your client and server code is ready here are the steps to Test your application locally &lt;/p&gt;

&lt;p&gt;Step-4&lt;br&gt;
Deploy the server to Azure WebApp&lt;br&gt;
To understand how-to deploy a .NET 6 gRPC app on App Service, please visit &lt;a href="https://github.com/Azure/app-service-linux-docs/blob/master/HowTo/gRPC/Linux/.NET/use_gRPC_with_dotnet.md" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
Please make sure to enable HTTP version, &lt;strong&gt;Enable HTTP 2.0 Proxy and add HTTP20_ONLY_PORT application setting as gRPC only work using http2.0 as shown below&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdu311c3kp4v82z1dmcux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdu311c3kp4v82z1dmcux.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8cizmsfd5qv4atli3xc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8cizmsfd5qv4atli3xc.png" alt=" " width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Calling gRPC from APIM
&lt;/h3&gt;

&lt;p&gt;Typical API deployment steps include the following&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy the self hosted gateway on Azure API management.&lt;/li&gt;
&lt;li&gt;Import the gRPC API in API Management&lt;/li&gt;
&lt;li&gt;Update the .NET gRPC client application to test using API management. &lt;/li&gt;
&lt;li&gt;Since gRPC requires HTTP/2 for inbound and outbound traffic make sure that you enabled HTTP/2 protocol for client traffic.&lt;/li&gt;
&lt;li&gt;Go to API Management(left side blade) Settings → Protocols &amp;amp; Ciphers&lt;/li&gt;
&lt;li&gt;Enable HTTP/2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step-1&lt;br&gt;
Deploy the self hosted gateway on Azure API management as explianed &lt;a href="https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-provision-self-hosted-gateway" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-2&lt;br&gt;
Import the gRPC API in API Management and enable the http2 in API management as shown below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your APIM instance in Azure Portal.&lt;/li&gt;
&lt;li&gt;Go to APIs &amp;gt; Under Define a new API, select gRPC.&lt;/li&gt;
&lt;li&gt;Upload your .proto file.&lt;/li&gt;
&lt;li&gt;Enter your gRPC server URL (must be HTTPS + HTTP/2).&lt;/li&gt;
&lt;li&gt;Select the gateway you want to expose it on.&lt;/li&gt;
&lt;li&gt;Click Create.&lt;/li&gt;
&lt;li&gt;API will Parse the .proto file and create operations for each RPC method and Map them to the backend service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e380z038ip06zmuvzkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e380z038ip06zmuvzkn.png" alt=" " width="799" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-3&lt;br&gt;
As a last step update the .NET gRPC client application to test or call the endpoint using API management.&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/api-management/azure-openai-api-from-specification#test-the-azure-openai-api" rel="noopener noreferrer"&gt;Ref this link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Common ssues &amp;amp; Fixes
&lt;/h3&gt;

&lt;p&gt;APIM cannot route the request&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cause: .proto mismatch or wrong method name.As&lt;/li&gt;
&lt;li&gt;Fix: Re-import correct .proto. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backend not reachable&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cause: HTTP/2 disabled on App Service.&lt;/li&gt;
&lt;li&gt;Fix: Enable HTTP/2 + HTTP2 Proxy. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing fails in APIM portal&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cause: Portal does not support gRPC testing.&lt;/li&gt;
&lt;li&gt;Fix: Use external gRPC client. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>grpc</category>
      <category>apimanagement</category>
      <category>selfhostegateway</category>
    </item>
    <item>
      <title>Configuring CORS in Azure API Management</title>
      <dc:creator>shailugit</dc:creator>
      <pubDate>Sat, 30 May 2026 19:08:48 +0000</pubDate>
      <link>https://dev.to/shailugit/configuring-cors-in-azure-api-management-21kp</link>
      <guid>https://dev.to/shailugit/configuring-cors-in-azure-api-management-21kp</guid>
      <description>&lt;p&gt;Configuring CORS in Azure API Management is about adding the built‑in cors policy in the right scope. You can set it up at all APIs or a single API/single operation and setting the allowed origins, methods, and headers correctly. This article will explain step by step on how to setup APIM CORS policy from basics to testing and common pitfalls.&lt;/p&gt;

&lt;p&gt;This policy let browser-based apps to call your APIs hosted behind APIM without being blocked by the browser’s same-origin policy. APIM handle preflight OPTIONS requests and add the right headers before the request hits your backend. &lt;/p&gt;

&lt;p&gt;Here are the basic &lt;strong&gt;CORS configuration&lt;/strong&gt; which you can setup via Azure portal.&lt;/p&gt;

&lt;p&gt;Open your APIM instance&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Azure portal and search for “API Management services” and select    your APIM instance from the list. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add CORS policy at the desired scope&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To configure at API level (most common):&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the left menu, select APIs and choose the API you want to configure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Design or Policies view, locate Inbound processing.

&lt;ul&gt;
&lt;li&gt;Click + Add policy.&lt;/li&gt;
&lt;li&gt;Choose “Allow cross-origin resource sharing (CORS)” from the list.
&lt;/li&gt;
&lt;li&gt;You’ll see a form-based editor where you can set:&lt;/li&gt;
&lt;li&gt;Allowed origins – e.g. &lt;a href="https://myapp.com" rel="noopener noreferrer"&gt;https://myapp.com&lt;/a&gt;, &lt;a href="https://app.contoso.com" rel="noopener noreferrer"&gt;https://app.contoso.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Allowed methods – e.g. GET, POST, PUT, DELETE&lt;/li&gt;
&lt;li&gt;Allowed headers – e.g. Content-Type, Authorization, custom headers&lt;/li&gt;
&lt;li&gt;Expose headers – headers the browser can read from responses&lt;/li&gt;
&lt;li&gt;Allow credentials – whether to allow cookies/auth headers&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;inbound&amp;gt;&lt;br&gt;
        &amp;lt;cors allow-credentials="true"&amp;gt;&lt;br&gt;
            &amp;lt;allowed-origins&amp;gt;&lt;br&gt;
                &amp;lt;origin&amp;gt;https://apim-one-shailesh.developer.azure-api.net&amp;lt;/origin&amp;gt;&lt;br&gt;
            &amp;lt;/allowed-origins&amp;gt;&lt;br&gt;
            &amp;lt;allowed-methods preflight-result-max-age="60"&amp;gt;&lt;br&gt;
                &amp;lt;method&amp;gt;POST&amp;lt;/method&amp;gt;&lt;br&gt;
                &amp;lt;method&amp;gt;PATCH&amp;lt;/method&amp;gt;&lt;br&gt;
            &amp;lt;/allowed-methods&amp;gt;&lt;br&gt;
            &amp;lt;allowed-headers&amp;gt;&lt;br&gt;
                &amp;lt;header&amp;gt;*&amp;lt;/header&amp;gt;&lt;br&gt;
            &amp;lt;/allowed-headers&amp;gt;&lt;br&gt;
            &amp;lt;expose-headers&amp;gt;&lt;br&gt;
                &amp;lt;header&amp;gt;*&amp;lt;/header&amp;gt;&lt;br&gt;
            &amp;lt;/expose-headers&amp;gt;&lt;br&gt;
        &amp;lt;/cors&amp;gt;&lt;br&gt;
    &amp;lt;/inbound&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4y169gzjxcodt2bnl6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4y169gzjxcodt2bnl6n.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Save to apply.&lt;br&gt;
Initally lets allow all the methods to call and to test the scenerio we will be using APIM developer portal test console to work so you can try APIs from the portal, here portal’s domain must be in your CORS policy’s allowed origins. &lt;/p&gt;

&lt;p&gt;In your APIM instance, under Developer portal → Portal overview, there’s an Enable CORS option that can auto-configure a CORS policy for all APIs.&lt;br&gt;
Alternatively, manually add the portal domain to your global CORS policy.&lt;/p&gt;

&lt;p&gt;Since in the above sample code "GET" method is not allowed in CORS policy , hence testing it via APIM developer portal is showing CORS validation error. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F919ivxgvl8g9k6tw9o3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F919ivxgvl8g9k6tw9o3d.png" alt=" " width="799" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can allowed origins, headers  or methods as your scenario grows.&lt;/p&gt;

&lt;p&gt;Note: If you put CORS only at Product scope and your API uses subscription key in a header, the preflight OPTIONS request may fail because it doesn’t include the subscription key header. Prefer API/global scope or pass the key via query string in that scenario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common mistakes and how to avoid them&lt;/strong&gt;&lt;br&gt;
No CORS policy at all:&lt;br&gt;
Browser shows “No Access-Control-Allow-Origin header is present” → Add a cors policy at the appropriate scope. &lt;/p&gt;

&lt;p&gt;Using * with credentials:&lt;br&gt;&lt;br&gt;
If allow-credentials="true", you cannot use * for allowed-origins. List explicit origins instead.&lt;/p&gt;

&lt;p&gt;Multiple conflicting CORS policies:&lt;br&gt;&lt;br&gt;
Having one at global and another at API level with different settings can cause unexpected behavior. Consolidate into one clear policy. &lt;/p&gt;

&lt;p&gt;Forgetting custom headers:&lt;br&gt;&lt;br&gt;
If your frontend sends headers like x-api-version or x-request-id, they must be listed in  or the preflight will fail.&lt;/p&gt;

&lt;p&gt;OPTIONS not defined in backend:&lt;br&gt;
Without a CORS policy, APIM may return 405 Method Not Allowed for OPTIONS because no operation is defined. The cors policy handles OPTIONS at the gateway so your backend doesn’t need to. &lt;/p&gt;

</description>
      <category>api</category>
      <category>azure</category>
      <category>azureapimanagement</category>
      <category>apigateway</category>
    </item>
    <item>
      <title>Azure API Management Service with Custom Domain</title>
      <dc:creator>shailugit</dc:creator>
      <pubDate>Sat, 11 Apr 2026 02:28:15 +0000</pubDate>
      <link>https://dev.to/shailugit/azure-api-management-service-with-custom-domain-2ol3</link>
      <guid>https://dev.to/shailugit/azure-api-management-service-with-custom-domain-2ol3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;br&gt;
When you create an Azure API Management service instance, Azure assigns a domain of *.azure-api.net like .azure-api.net. However, in general you see customers do expose their API Management endpoints using their own custom domain name. This tutorial will show steps by steps how you can procure custom domain and then setup your APIM instance to map the custom domain name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-requirements&lt;/strong&gt;&lt;br&gt;
Before we start, we could make sure that we have APIM service created&lt;br&gt;
Obtain/Buy a custom domain name owned by you or your organization.&lt;/p&gt;

&lt;p&gt;Note: The document I already publised it at my GITHUB here&lt;br&gt;
&lt;a href="https://github.com/shailugit/Azure-API-Management-Blogs/blob/main/APIM%20with%20Custom%20Domain.md" rel="noopener noreferrer"&gt;https://github.com/shailugit/Azure-API-Management-Blogs/blob/main/APIM%20with%20Custom%20Domain.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;br&gt;
To set up a custom domain in Azure API Management (APIM) we should have APIM instance available and obtain a custom domain name.&lt;br&gt;
Once done we should have a valid certificate with a public and private key (.PFX) matches the domain name for DNS Configuration.&lt;br&gt;
Later we have to host DNS records on a DNS server to map the custom domain name to the default domain name of your API Management instance.&lt;/p&gt;

&lt;p&gt;Please follow the below steps to capture your domain name and how to map it with your API Management instance.&lt;br&gt;
First you need to create an API Management instance using the steps in the document below, for the same I am using APIM Developer Tier. Please note that we are not using APIM in VNET mode as it may need additional changes in case you are using your own DNS server. &lt;/p&gt;

&lt;p&gt;Refer&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/api-management/api-management-get-started#a-namecreate-service-instance-acreate-an-api-management-instance" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/azure/api-management/api-management-get-started#a-namecreate-service-instance-acreate-an-api-management-instance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddt8jyl89zuiwmu691e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddt8jyl89zuiwmu691e9.png" alt=" " width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first step is to have a custom domain name. To purchase the custom domain you can look for various domain name registrars like Namecheap, GoDaddy, Google Domains, or any other service providers. However for our demo purpose I am using the IONOS service here.&lt;/p&gt;

&lt;p&gt;You can also use the Azure App service domain &lt;a href="https://learn.microsoft.com/en-us/azure/app-service/manage-custom-dns-buy-domain" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/azure/app-service/manage-custom-dns-buy-domain&lt;/a&gt;&lt;br&gt;
but I since I get a good discount at &lt;a href="https://www.ionos.com/" rel="noopener noreferrer"&gt;https://www.ionos.com/&lt;/a&gt; and able to procure my domain in less than a dollar for a year hence I am using this service.&lt;/p&gt;

&lt;p&gt;To purchase the domain look for the any of the above domain provider or check out the domain name. I google free custom domain service however as of writing this article I don't see any registrars providing free services.&lt;/p&gt;

&lt;p&gt;Since I used IONOS I need to login and create a account(Simple step).&lt;br&gt;
Then look for your domain name if available and purchase it. This service will provide you free email and other offers however please see fit based on your needs. The IONOS will take 6-8 hours to confirm the availability of your domain. &lt;/p&gt;

&lt;p&gt;This is how your order will look like once you create and submit the order to purchase a domain name. The potal will allow you to create a login for IONOS where you are configure your domain and purchase other products offered.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskc731t3zeowutc9xzn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskc731t3zeowutc9xzn4.png" alt=" " width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirm your order and agree on the contract details since it will auto renew, so if you are just using this for testing purpose please check your bill for next year(if you would like to continue or not).&lt;/p&gt;

&lt;p&gt;I just need to setup our Custom domain hence I purchase Domain and SSL only option and once domain is available you will receive the email confirmation. This is how your domain registration looks like once your domain is ready to use and you logged in to your IONOS dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0bgj16e890kgos8y5xz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0bgj16e890kgos8y5xz.png" alt=" " width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the next steps is to generate the SSL certificate for your register domain.&lt;br&gt;
Select the domain and click the gear icon next to the SSL certificate you want to set up. Then, click Set up SSL certificate. Click Activate now in the SSL Unlimited tile. In the input field, enter the domain to which the certificate should be issued or click in the input field and select the desired domain to generate the certificate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3u1fgl9th8e9tw56lwxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3u1fgl9th8e9tw56lwxf.png" alt=" " width="800" height="657"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the certificate is generated click Download Private Key and save the private key to your computer. It's important to have this private key as you may need it in future. However you can Reissue the certificate or download certificate files under tab SSL Certificate files. Since we need PFX files for our APIM instance hence download the .PFX file. To create a password-protected .PFX file, you have to provide the private key and a password. Please do select create intermediate certificate option and provide the private key and password for PFX file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wz9is4ltw1nc3sxd5u6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wz9is4ltw1nc3sxd5u6.png" alt=" " width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yyxtz6b37uvmk29gw8n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yyxtz6b37uvmk29gw8n.png" alt=" " width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please note that the certificate is required with a public and private key (.PFX) and subject or subject alternative name (SAN) must match the domain name which will enable your API Management instance to securely expose URLs over SSL.&lt;/p&gt;

&lt;p&gt;Now to setup the custom domain go to your APIM instance and select Custom domain blade under Deployment +Infrastructure. Here is a default domain provided my APIM service. To add your custom domain Click on + Add button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsvg6e0yharestpdh2hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsvg6e0yharestpdh2hf.png" alt=" " width="562" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the demo purpose I am adding the certificate for my Gateway and Developer portal, the option below is using certificate file directly loading to Azure API management however if you prefer you can select certificate from Key Vault. The host name here for Gateway is api.aztechbytes.com and for developer portal is developer.aztechbytes.com.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqydm2sgdii9rlei7sctc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqydm2sgdii9rlei7sctc.png" alt=" " width="562" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since I am using custom domain for gateway and developer portal hence I added both under Custom domain. Adding custom domain may take up to 45+ min and your developer SKU will be down for this operation. Once the custom domain updated scessfully you will see the names under your APIM&amp;gt;Custom domain. Now call your APIM endpoint using your custom domain and customize your APIM developer portal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58x4my7djfkt193nb1tf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58x4my7djfkt193nb1tf.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>azure</category>
      <category>networking</category>
      <category>apigateway</category>
    </item>
  </channel>
</rss>
