PageSourceSearch

https://blog.rsuter.com/nginx-in-azure-web-app-for-containers/

html rsuter.com collected 2026-10-02 05:35:04 UTC 30,476 bytes, 1,356 lines download raw bytes

1<!doctype html>
2<html class="no-js" lang="en">
3<head>
4	<meta charset="utf-8">
5	<meta name="viewport" content="width=device-width, initial-scale=1.0">
6	<title>Hosting an Nginx Reverse Proxy in an Azure Web App for Containers (App Service) - Rico Suter's blog.</title>
7
8    <link rel="stylesheet" type="text/css" href="https://blog.rsuter.com/assets/css/styles_feeling_responsive.css">
9
10  
11
12	
12<script src="https://blog.rsuter.com/assets/js/modernizr.min.js"></script>
12
13
14	
14<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.5.18/webfont.js"></script>
14
15	
15<script>
16		WebFont.load({
17			google: {
18				families: [ 'Lato:400,700,400italic:latin', 'Volkhov::latin' ]
19			}
20		});
21	</script>
21
22
23	<noscript>
24		<link href='http://fonts.googleapis.com/css?family=Lato:400,700,400italic%7CVolkhov' rel='stylesheet' type='text/css'>
25	</noscript>
26
27
28	<link rel="alternate" type="application/rss+xml" title="Rico Suter RSS Feed" href="https://blog.rsuter.com/feed.xml">
29	
30	<!-- Search Engine Optimization -->
31	<meta name="description" content="Article describing how to set up an Azure Web App for Container to act as a Nginx reverse proxy to an other application.">
32	<meta name="keywords" content="Azure,Docker,ASP.NET Core,.NET,Nginx,">
33	
34	
35	
36	
37	
38	
39	<link rel="canonical" href="https://blog.rsuter.com/nginx-in-azure-web-app-for-containers/">
40
41
42	<!-- Facebook Open Graph -->
43	<meta property="og:title" content="Hosting an Nginx Reverse Proxy in an Azure Web App for Containers (App Service)">
44	<meta property="og:description" content="Article describing how to set up an Azure Web App for Container to act as a Nginx reverse proxy to an other application.">
45	<meta property="og:url" content="https://blog.rsuter.com/nginx-in-azure-web-app-for-containers/">
46	<meta property="og:locale" content="en_EN">
47	<meta property="og:type" content="website">
48	<meta property="og:site_name" content="Rico Suter's blog">
49	
50	
51
52
53	
54
55	<link type="text/plain" rel="author" href="https://blog.rsuter.com/humans.txt">
56
57	
58
59  <link rel="icon" sizes="32x32" href="/favicon.ico">
60	<!-- 
61
62	<link rel="icon" sizes="32x32" href="https://blog.rsuter.com/assets/img/favicon-32x32.png">
63
64	<link rel="icon" sizes="192x192" href="https://blog.rsuter.com/assets/img/touch-icon-192x192.png">
65
66	<link rel="apple-touch-icon-precomposed" sizes="180x180" href="https://blog.rsuter.com/assets/img/apple-touch-icon-180x180-precomposed.png">
67
68	<link rel="apple-touch-icon-precomposed" sizes="152x152" href="https://blog.rsuter.com/assets/img/apple-touch-icon-152x152-precomposed.png">
69
70	<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://blog.rsuter.com/assets/img/apple-touch-icon-144x144-precomposed.png">
71
72	<link rel="apple-touch-icon-precomposed" sizes="120x120" href="https://blog.rsuter.com/assets/img/apple-touch-icon-120x120-precomposed.png">
73
74	<link rel="apple-touch-icon-precomposed" sizes="114x114" href="https://blog.rsuter.com/assets/img/apple-touch-icon-114x114-precomposed.png">
75
76	
77	<link rel="apple-touch-icon-precomposed" sizes="76x76" href="https://blog.rsuter.com/assets/img/apple-touch-icon-76x76-precomposed.png">
78
79	<link rel="apple-touch-icon-precomposed" sizes="72x72" href="https://blog.rsuter.com/assets/img/apple-touch-icon-72x72-precomposed.png">
80
81	<link rel="apple-touch-icon-precomposed" href="https://blog.rsuter.com/assets/img/apple-touch-icon-precomposed.png">	
82
83	<meta name="msapplication-TileImage" content="https://blog.rsuter.com/assets/img/msapplication_tileimage.png">
84
85	<meta name="msapplication-TileColor" content="#fabb00">
86 -->
87
88	
89</head>
90<body id="top-of-page" class="post">
91	
92	
93<div id="navigation" class="sticky row">
94  <nav class="top-bar" role="navigation" data-topbar>
95    <ul class="title-area">
96      <li class="name">
97      <h1 class="show-for-small-only"><a href="https://blog.rsuter.com"> Rico Suter's blog.</a></h1>
98    </li>
99       <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
100      <li class="toggle-topbar menu-icon"><a href="#"><span>Nav</span></a></li>
101    </ul>
102    <section class="top-bar-section">
103
104      <ul class="right">
105        
106
107              
108
109          
110          
111        
112
113              
114
115          
116          
117        
118
119              
120
121          
122          
123        
124        
125      </ul>
126
127      <ul class="left">
128        
129
130              
131
132          
133          
134
135            
136            
137              <li><a  href="https://blog.rsuter.com/about/">About</a></li>
138              <li class="divider"></li>
139
140            
141            
142          
143        
144
145              
146
147          
148          
149
150            
151            
152              <li><a  href="https://blog.rsuter.com/">Blog</a></li>
153              <li class="divider"></li>
154
155            
156            
157          
158        
159
160              
161
162          
163          
164
165            
166            
167              <li><a  href="https://blog.rsuter.com/projects/">Projects</a></li>
168              <li class="divider"></li>
169
170            
171            
172          
173        
174        
175      </ul>
176    </section>
177  </nav>
178</div><!-- /#navigation -->
179
180	
181
182	
183
184<div id="masthead-no-image-header" style="background-color: #003052; border-bottom: 8px solid #0060A5">
185	<div class="row">
186		<div class="small-12 columns" style="height: 100px">
187			<tr id="fullHeader">
188				<td>&nbsp;</td>
189				<td id="header" style="padding-left:10px; padding-right:10px">
190					<div style="float:left">
191						<div>
192							<a href="http://twitter.com/ricosuter" style="text-decoration: none">
193								<img src="/assets/img/icons/twitter.png"
194									width="27" height="27" alt="" border="0">
195							</a>
196							<a href="http://ch.linkedin.com/pub/rico-suter/3a/87a/784" style="text-decoration: none">
197								<img src="/assets/img/icons/linkedin.png"
198									width="27" height="27" alt="" border="0">
199							</a>
200							<a href="https://www.xing.com/profile/Rico_Suter2" style="text-decoration: none">
201								<img src="/assets/img/icons/xing.png" width="27"
202									height="27" alt="" border="0">
203							</a>
204							<a href="http://stackoverflow.com/users/876814/rico-suter" style="text-decoration: none">
205								<img src="/assets/img/icons/stackoverflow.png"
206									width="27" height="27" alt="" border="0">
207							</a>
208							<a href="https://www.nuget.org/profiles/rsuter/" style="text-decoration: none">
209								<img src="/assets/img/icons/nuget.png" width="27"
210									height="27" alt="" border="0">
211							</a>
212						</div>
213
214						<div style="margin-top:15px; margin-bottom:10px; color: white">
215							<big>Rico Suter's blog.</big>
216						</div>
217					</div>
218
219					<div style="float:right; font-size:0pt" id="bigHeader">
220						<a href="/about" style="text-decoration: none; color:white">
221							<img src="/assets/img/buttons/button_about.png"
222								width="100" height="100" border="0">
223						</a>
224						<a href="/"
225							style="text-decoration: none; color:white; padding:0; margin:0; border-style: none">
226							<img src="/assets/img/buttons/button_blog.png"
227								width="100" height="100" border="0">
228						</a>
229						<a href="/projects"
230							style="text-decoration: none; color:white; padding:0; margin:0; border-style: none">
231							<img src="/assets/img/buttons/button_projects.png"
232								width="100" height="100" border="0">
233						</a>
234					</div>
235				</td>
236				<td>&nbsp;</td>
237			</tr>
238
239			<!-- <a id="logo" href="https://blog.rsuter.com/" title="Rico Suter's blog – ">
240				<img src="https://blog.rsuter.com/assets/img/logo.png" alt="Rico Suter's blog – ">
241			</a> -->
242		</div><!-- /.small-12.columns -->
243	</div><!-- /.row -->
244</div><!-- /#masthead -->
245
246
247
248
249
250
251
252
253	<div class="row t30"
254  style="display: block;position: relative; bottom: 0;
254 min-height: calc(100% - 206px); margin-bottom: 24px">
255
256  <div id="content-container">
257    <div id="content"
258      class="medium-12 columns">
259      <article itemscope itemtype="http://schema.org/Article">
260        <header>
261          
262
263          <div itemprop="name">
264            
265            <h1><a href="https://blog.rsuter.com/nginx-in-azure-web-app-for-containers/">Hosting an Nginx Reverse Proxy in an Azure Web App for Containers (App Service)</a></h1>
266          </div>
267        </header>
268
269        <div id="page-meta" class="t10">
270          <p>
271            
272            <time class="icon-calendar pr20" datetime="2022-12-10T00:00:00+00:00" itemprop="datePublished">
273              Published 2022-12-10</time>
274            
275
276            
277          </p>
278        </div>
279
280        
281
282        
283        <!-- Google AdSense -->
284        <div>
285          <style>
286            #carbonads * {
287              margin: initial;
288              padding: initial;
289            }
290
291            #carbonads {
292              font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
293                Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
294                sans-serif;
295            }
296
297            #carbonads {
298              display: flex;
299              max-width: 640px;
300              background-color: hsl(0, 0%, 98%);
301              box-shadow:
302                0 2px 1px 1px hsla(0, 0%, 0%, .05),
303                0 2px 2px 2px hsla(0, 0%, 0%, .05),
304                0 2px 4px 4px hsla(0, 0%, 0%, .05);
305              z-index: 100;
306            }
307
308            #carbonads a {
309              font-weight: normal;
310              border: none;
311              color: inherit;
312              text-decoration: none;
313            }
314
315            #carbonads a:hover {
316              font-weight: normal;
317              border: none;
318              color: inherit;
319              text-decoration: none;
320            }
321
322            #carbonads span {
323              position: relative;
324              display: block;
325              overflow: hidden;
326            }
327
328            #carbonads .carbon-wrap {
329              display: flex;
330            }
331
332            #carbonads .carbon-img {
333              display: block;
334              margin: 0;
335              line-height: 1;
336            }
337
338            #carbonads .carbon-img img {
339              display: block;
340            }
341
342            #carbonads .carbon-text {
343              font-size: 13px;
344              padding: 10px;
345              margin-bottom: 16px;
346              line-height: 1.5;
347              text-align: left;
348            }
349
350            #carbonads .carbon-poweredby {
351              display: block;
352              padding: 6px 8px;
353              background: #f1f1f2;
354              text-align: center;
355              text-transform: uppercase;
356              letter-spacing: 0.5px;
357              font-weight: 600;
358              font-size: 8px;
359              line-height: 1;
360              border-top-left-radius: 3px;
361              position: absolute;
362              bottom: 0;
363              right: 0;
364            }
365          </style>
366          
366<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CESI52JN&placement=carbonadsnet"
367            id="_carbonads_js"></script>
367
368          <br />
369        </div>
370        
371
372        <div itemprop="articleSection">
373          <p>The following steps describe how to set up an Azure Web App for Container to act as a Nginx reverse proxy to an other application. I used this to redirect all HTTP calls from a public domain into an internal Azure VM. The benefit is that this way you can still use App Service specific features like certificate handling or the AD-based authentication; and also SSL termination is handled by the proxy (the application runs only on HTTP).</p>
374
375<h2 id="create-web-app-for-containers">Create Web App for Containers</h2>
376
377<p>In the Azure Portal create a new Web App for Containers resource:</p>
378
379<p><img src="./01_create_web_app_for_containers.png" alt="" /></p>
380
381<p>Choose “Docker Container” as Publish method and “Linux” as Operating System:</p>
382
383<p><img src="./01_create_web_app_for_containers2.png" alt="" /></p>
384
385<h2 id="setup-nginx-container">Setup Nginx container</h2>
386
387<p>In the newly created Web App for Containers go to the Deployment Center and choose “nginx:latest” as Docker image:</p>
388
389<p><img src="./02_deployment_center.png" alt="" /></p>
390
391<h2 id="map-storage-with-configuration">Map storage with configuration</h2>
392
393<p>Next, create a new Azure Storage and a new storage container (e.g. <code class="highlighter-rouge">nginx</code>). In this container create a new <code class="highlighter-rouge">nginx.config</code> file:</p>
394
395<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>events {}
396http {
397    server {
398        location / {
399            proxy_pass http://yourtargethost/;
400
401            proxy_set_header X-Forwarded-Host mynginxsample.azurewebsites.net;
402            proxy_set_header X-Forwarded-Proto https;
403            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
404
405            proxy_pass_request_headers on;
406            proxy_set_header Upgrade $http_upgrade;
407            proxy_set_header Connection "Upgrade";
408        }
409    }
410}
411</code></pre></div></div>
412
413<p><code class="highlighter-rouge">mynginxsample.azurewebsites.net</code> is the public host address the external clients will use; <code class="highlighter-rouge">http://yourtargethost/</code> is the host where the requests should be redirected to. The following headers are needed so that the target application knows the original host name:</p>
414
415<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>proxy_set_header X-Forwarded-Host mynginxsample.azurewebsites.net;
416proxy_set_header X-Forwarded-Proto https;
417proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
418</code></pre></div></div>
419
420<p>To support web socket connection pass through, use the following options (required for e.g. SignalR):</p>
421
422<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>proxy_pass_request_headers on;
423proxy_set_header Upgrade $http_upgrade;
424proxy_set_header Connection "Upgrade";
425</code></pre></div></div>
426
427<p>In the App Service, go to Configuration and create a new Path Mapping with the Mount path <code class="highlighter-rouge">/etc/nginx</code>:</p>
428
429<p><img src="./03_create_path_mapping.png" alt="" /></p>
430
431<h2 id="optional-enable-forwarded-header-processing-in-aspnet-core">Optional: Enable forwarded header processing in ASP.NET Core</h2>
432
433<p>In ASP.NET Core you need to enable the processing of forwarded headers (X-Forwarded-*), so that the application uses the correct public host names. To enable the feature, add the following configuration code:</p>
434
435<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">public</span> <span class="k">void</span> <span class="nf">ConfigureServices</span><span class="p">(</span><span class="n">IServiceCollection</span> <span class="n">services</span><span class="p">)</span>
436<span class="p">{</span>
437    <span class="n">services</span><span class="p">.</span><span class="n">Configure</span><span class="p">&lt;</span><span class="n">ForwardedHeadersOptions</span><span class="p">&gt;(</span><span class="n">options</span> <span class="p">=&gt;</span>
438    <span class="p">{</span>
439        <span class="n">options</span><span class="p">.</span><span class="n">ForwardedHeaders</span> <span class="p">=</span> <span class="n">ForwardedHeaders</span><span class="p">.</span><span class="n">All</span><span class="p">;</span>
440
441        <span class="c1">// allow all (for security reasons, this should only be used when </span>
442        <span class="c1">// only the proxy can access the application directly)</span>
443        <span class="n">options</span><span class="p">.</span><span class="n">KnownNetworks</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="k">new</span> <span class="nf">IPNetwork</span><span class="p">(</span><span class="n">IPAddress</span><span class="p">.</span><span class="nf">Parse</span><span class="p">(</span><span class="s">"0.0.0.0"</span><span class="p">),</span> <span class="m">0</span><span class="p">));</span>
444    <span class="p">});</span>
445
446    <span class="p">...</span>
447<span class="p">}</span>
448</code></pre></div></div>
449
450<p>Then enable the configuration in the HTTP pipeline with:</p>
451
452<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">public</span> <span class="k">void</span> <span class="nf">Configure</span><span class="p">(</span><span class="n">IApplicationBuilder</span> <span class="n">app</span><span class="p">,</span> <span class="n">IHostEnvironment</span> <span class="n">env</span><span class="p">,</span> <span class="n">ILogger</span><span class="p">&lt;</span><span class="n">Startup</span><span class="p">&gt;</span> <span class="n">logger</span><span class="p">)</span>
453<span class="p">{</span>
454    <span class="n">app</span><span class="p">.</span><span class="nf">UseForwardedHeaders</span><span class="p">();</span>
455
456    <span class="p">...</span>
457<span class="p">}</span>
458</code></pre></div></div>
459
460<p>The code above should only be executed when the application is actually running behind a proxy (i.e. consider putting it behind a configuration flag). For more information see <a href="https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer">Configure ASP.NET Core to work with proxy servers and load balancers</a>.</p>
461
462<h2 id="restart-the-app">Restart the app</h2>
463
464<p>Now restart the app so that the configuration is picked up and you should have the Nginx proxy running.</p>
465
466          <br />
467          <br />
468        </div>
469
470        
471        <div id="page-meta" class="t30">
472	<p>
473		<!-- Look the author details up from the site config. -->
474		
475		<!-- Output author details if some exist. -->
476		
477		<span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name"
478				class="pr20 icon-edit"><a href="https://rsuter.com" target="_blank"> Rico Suter</a></span>
479		</span>
480		
481
482		<!-- 
483		<time class="icon-calendar pr20" datetime="2022-12-10T00:00:00+00:00" itemprop="datePublished"> PUBLISHED 2022-12-10</time>
484		
485
486		 -->
487
488		<span class="icon-archive pr20">
489			SOFTWARE ENGINEERING</span>
490
491		<span class="icon-edit pr20">
492			<a href="https://github.com/RicoSuter/ricosuter.github.io/blob/master/_posts/2022-12-10-nginx-in-app-service/2022-12-10-index.md">
493				EDIT
494			</a>
495		</span>
496
497		<br />
498		<span class="pr20"><span class="icon-price-tag pr10"> <a
499					href="/tags#Azure">Azure</a></span>&nbsp; <span class="icon-price-tag pr10"> <a
500					href="/tags#Docker">Docker</a></span>&nbsp; <span class="icon-price-tag pr10"> <a
501					href="/tags#ASP.NET+Core">ASP.NET Core</a></span>&nbsp; <span class="icon-price-tag pr10"> <a
502					href="/tags#.NET">.NET</a></span>&nbsp; <span class="icon-price-tag pr10"> <a
503					href="/tags#Nginx">Nginx</a></span>&nbsp; </span>
504	</p>
505
506	
507	<div id="post-nav" class="row">
508		
509		<div class="small-6 columns"><a class="button small radius prev"
510				href="https://blog.rsuter.com/versioned-aspnetcore-apis-with-openapi-generation-and-azure-api-management/">&laquo; How to set up an ASP.NET Core project with multiple API versions, OpenAPI generation and Azure API Management</a></div>
511		
512		<!-- <div class="small-2 columns text-center"><a class="radius button small" href="https://blog.rsuter.com/archive/" title="Blog Archive">Archive</a></div> -->
513		
514		<div class="small-6 columns text-right"><a class="button small radius next"
515				href="https://blog.rsuter.com/introducing-namotion-interceptor/">Introducing Namotion.Interceptor for .NET &raquo;</a></div>
516		
517	</div>
518	
519</div>
520        
521
522        
523        
524<h3 id="comments" class="t30">Discussion</h3>
525<div id="disqus_thread"></div>
526<script>
527    var disqus_config = function () {
528        this.page.url = 'https://blog.rsuter.com/nginx-in-azure-web-app-for-containers/';
529        this.page.identifier = '/nginx-in-azure-web-app-for-containers/';
530    };
531    (function() {
532        var d = document, s = d.createElement('script');
533        
534        s.src = 'https://rsuter.disqus.com/embed.js';
535        
536        s.setAttribute('data-timestamp', +new Date());
537        (d.head || d.body).appendChild(s);
538    })();
539</script>
539
540<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
541
542        
543      </article>
544    </div>
545  </div>
546
547  
548
549
550  
551  <div class="medium-4 columns" id="sidebar"
552    style="height: 100lv; position: absolute; top: 0; bottom: 0; right: 0; margin-bottom: -54px">
553    <aside>
554	<div class="border radius b30">
555		<h2>Top Tags</h2>
556		<p>
557			
558			
559			
560			
561			
562			
563			
564			
565			
566			
567			
568			<span style="white-space: nowrap">
569				<a style="font-size: 121%"
570					href="/tags#.NET">
571					.NET
572					<!-- (37) -->
573				</a>
574				&nbsp;&nbsp;
575			</span>
576			
577			
578			
579			
580			
581			<span style="white-space: nowrap">
582				<a style="font-size: 119%"
583					href="/tags#C%23">
584					C#
585					<!-- (33) -->
586				</a>
587				&nbsp;&nbsp;
588			</span>
589			
590			
591			
592			
593			
594			<span style="white-space: nowrap">
595				<a style="font-size: 103%"
596					href="/tags#Entity+Framework">
597					Entity Framework
598					<!-- (6) -->
599				</a>
600				&nbsp;&nbsp;
601			</span>
602			
603			
604			
605			
606			
607			
608			
609			
610			
611			
612			
613			<span style="white-space: nowrap">
614				<a style="font-size: 102%"
615					href="/tags#XAML">
616					XAML
617					<!-- (4) -->
618				</a>
619				&nbsp;&nbsp;
620			</span>
621			
622			
623			
624			
625			
626			<span style="white-space: nowrap">
627				<a style="font-size: 101%"
628					href="/tags#async%2Fawait">
629					async/await
630					<!-- (3) -->
631				</a>
632				&nbsp;&nbsp;
633			</span>
634			
635			
636			
637			
638			
639			
640			
641			
642			
643			
644			
645			
646			
647			
648			
649			
650			
651			
652			
653			<span style="white-space: nowrap">
654				<a style="font-size: 102%"
655					href="/tags#WCF">
656					WCF
657					<!-- (4) -->
658				</a>
659				&nbsp;&nbsp;
660			</span>
661			
662			
663			
664			
665			
666			
667			
668			
669			
670			
671			
672			
673			
674			
675			
676			
677			
678			
679			
680			
681			
682			
683			
684			
685			
686			
687			
688			
689			
690			
691			
692			
693			
694			<span style="white-space: nowrap">
695				<a style="font-size: 102%"
696					href="/tags#WPF">
697					WPF
698					<!-- (5) -->
699				</a>
700				&nbsp;&nbsp;
701			</span>
702			
703			
704			
705			
706			
707			
708			
709			
710			
711			
712			
713			
714			
715			<span style="white-space: nowrap">
716				<a style="font-size: 102%"
717					href="/tags#Visual+Studio">
718					Visual Studio
719					<!-- (5) -->
720				</a>
721				&nbsp;&nbsp;
722			</span>
723			
724			
725			
726			
727			
728			
729			
730			<span style="white-space: nowrap">
731				<a style="font-size: 101%"
732					href="/tags#Git">
733					Git
734					<!-- (3) -->
735				</a>
736				&nbsp;&nbsp;
737			</span>
738			
739			
740			
741			
742			
743			
744			
745			
746			
747			
748			
749			
750			
751			
752			
753			<span style="white-space: nowrap">
754				<a style="font-size: 105%"
755					href="/tags#JavaScript">
756					JavaScript
757					<!-- (10) -->
758				</a>
759				&nbsp;&nbsp;
760			</span>
761			
762			
763			
764			
765			
766			
767			
768			<span style="white-space: nowrap">
769				<a style="font-size: 105%"
770					href="/tags#TypeScript">
771					TypeScript
772					<!-- (9) -->
773				</a>
774				&nbsp;&nbsp;
775			</span>
776			
777			
778			
779			
780			
781			
782			
783			
784			
785			
786			
787			
788			
789			
790			
791			
792			
793			
794			
795			
796			
797			
798			
799			
800			
801			<span style="white-space: nowrap">
802				<a style="font-size: 102%"
803					href="/tags#Best+Practices">
804					Best Practices
805					<!-- (4) -->
806				</a>
807				&nbsp;&nbsp;
808			</span>
809			
810			
811			
812			
813			
814			
815			
816			
817			
818			
819			
820			
821			
822			
823			
824			
825			
826			
827			
828			
829			
830			
831			
832			
833			
834			<span style="white-space: nowrap">
835				<a style="font-size: 104%"
836					href="/tags#ASP.NET">
837					ASP.NET
838					<!-- (7) -->
839				</a>
840				&nbsp;&nbsp;
841			</span>
842			
843			
844			
845			
846			
847			<span style="white-space: nowrap">
848				<a style="font-size: 102%"
849					href="/tags#ASP.NET+MVC">
850					ASP.NET MVC
851					<!-- (4) -->
852				</a>
853				&nbsp;&nbsp;
854			</span>
855			
856			
857			
858			
859			
860			<span style="white-space: nowrap">
861				<a style="font-size: 101%"
862					href="/tags#ASP.NET+MVC+5">
863					ASP.NET MVC 5
864					<!-- (3) -->
865				</a>
866				&nbsp;&nbsp;
867			</span>
868			
869			
870			
871			
872			
873			<span style="white-space: nowrap">
874				<a style="font-size: 101%"
875					href="/tags#Dependency+Injection">
876					Dependency Injection
877					<!-- (3) -->
878				</a>
879				&nbsp;&nbsp;
880			</span>
881			
882			
883			
884			
885			
886			<span style="white-space: nowrap">
887				<a style="font-size: 102%"
888					href="/tags#Reflection">
889					Reflection
890					<!-- (4) -->
891				</a>
892				&nbsp;&nbsp;
893			</span>
894			
895			
896			
897			
898			
899			
900			
901			
902			
903			
904			
905			
906			
907			
908			
909			
910			
911			
912			
913			
914			
915			
916			
917			
918			
919			
920			
921			
922			
923			
924			
925			
926			
927			
928			
929			
930			
931			
932			
933			
934			
935			
936			
937			
938			
939			
940			
941			
942			
943			
944			
945			
946			
947			
948			
949			
950			
951			
952			
953			<span style="white-space: nowrap">
954				<a style="font-size: 103%"
955					href="/tags#Azure+DevOps">
956					Azure DevOps
957					<!-- (6) -->
958				</a>
959				&nbsp;&nbsp;
960			</span>
961			
962			
963			
964			
965			
966			
967			
968			
969			
970			
971			
972			
973			
974			
975			
976			
977			
978			
979			
980			
981			
982			
983			
984			
985			
986			
987			
988			
989			
990			
991			
992			
993			
994			<span style="white-space: nowrap">
995				<a style="font-size: 103%"
996					href="/tags#.NET+Core">
997					.NET Core
998					<!-- (6) -->
999				</a>
1000				&nbsp;&nbsp;
1001			</span>
1002			
1003			
1004			
1005			
1006			
1007			<span style="white-space: nowrap">
1008				<a style="font-size: 101%"
1009					href="/tags#Code+Generation">
1010					Code Generation
1011					<!-- (3) -->
1012				</a>
1013				&nbsp;&nbsp;
1014			</span>
1015			
1016			
1017			
1018			
1019			
1020			<span style="white-space: nowrap">
1021				<a style="font-size: 102%"
1022					href="/tags#NSwag">
1023					NSwag
1024					<!-- (4) -->
1025				</a>
1026				&nbsp;&nbsp;
1027			</span>
1028			
1029			
1030			
1031			
1032			
1033			<span style="white-space: nowrap">
1034				<a style="font-size: 101%"
1035					href="/tags#Swagger">
1036					Swagger
1037					<!-- (3) -->
1038				</a>
1039				&nbsp;&nbsp;
1040			</span>
1041			
1042			
1043			
1044			
1045			
1046			
1047			
1048			
1049			
1050			
1051			
1052			<span style="white-space: nowrap">
1053				<a style="font-size: 101%"
1054					href="/tags#NuGet">
1055					NuGet
1056					<!-- (3) -->
1057				</a>
1058				&nbsp;&nbsp;
1059			</span>
1060			
1061			
1062			
1063			
1064			
1065			
1066			
1067			
1068			
1069			
1070			
1071			
1072			
1073			
1074			
1075			
1076			
1077			
1078			
1079			
1080			
1081			
1082			
1083			<span style="white-space: nowrap">
1084				<a style="font-size: 102%"
1085					href="/tags#ASP.NET+Core">
1086					ASP.NET Core
1087					<!-- (4) -->
1088				</a>
1089				&nbsp;&nbsp;
1090			</span>
1091			
1092			
1093			
1094			
1095			
1096			
1097			
1098			
1099			
1100			
1101			
1102			
1103			
1104			
1105			
1106			
1107			
1108			
1109			
1110			
1111			
1112			
1113			
1114			
1115			
1116			
1117			
1118			<span style="white-space: nowrap">
1119				<a style="font-size: 102%"
1120					href="/tags#Azure">
1121					Azure
1122					<!-- (5) -->
1123				</a>
1124				&nbsp;&nbsp;
1125			</span>
1126			
1127			
1128			
1129			
1130			
1131			
1132			
1133			
1134			
1135			
1136			
1137			
1138			
1139			
1140			
1141			
1142			
1143			
1144			
1145			
1146			
1147			
1148			
1149			
1150			
1151			
1152			
1153			
1154			
1155			
1156			
1157			
1158			
1159			
1160			
1161			
1162			
1163			
1164			
1165			
1166			
1167			
1168			
1169			
1170			
1171			
1172			
1173			
1174			
1175			
1176			
1177			
1178			
1179			
1180			
1181		</p>
1182
1183		<p>
1184			<a href="https://feedly.com/i/subscription/feed%2Fhttps%3A%2F%2Fblog.rsuter.com%2Ffeed.xml" target="blank">
1185				<img id="feedlyFollow" src="https://s3.feedly.com/img/follows/feedly-follow-rectangle-flat-big_2x.png"
1186					alt="follow us in feedly" width="131" height="56">
1187			</a>
1188		</p>
1189
1190		<p>
1191			<a href="/feed.xml">RSS Feed</a>
1192		</p>
1193
1194		<h2>Products</h2>
1195		<p>
1196			<ul>
1197				<li>
1198					<a href="https://apimundo.com">Apimundo</a>
1199				</li>
1200			</ul>
1201		</p>
1202
1203		<h2>Projects</h2>
1204		<p>
1205			<ul>
1206				<li>
1207					<a href="http://nswag.org">NSwag</a>
1208				</li>
1209				<li>
1210					<a href="http://njsonchema.org">NJsonSchema</a>
1211				</li>
1212				<li>
1213					<a href="http://mytoolkit.io">MyToolkit for .NET</a>
1214				</li>
1215			</ul>
1216
1217			<a href="/projects">More Projects &gt;</a>
1218		</p>
1219	</div>
1220</aside>
1221  </div>
1222  
1223</div>
1224
1225	
1226	<!-- <div id="up-to-top" class="row">
1227      <div class="small-12 columns" style="text-align: right;">
1228        <a class="iconfont" href="#top-of-page">&#xf108;</a>
1229      </div>
1230    </div> -->
1231
1232
1233<footer id="footer-content" class="bg-grau">
1234  <!-- <div id="footer">
1235        <div class="row">
1236          <div class="medium-6 large-5 columns">
1237            <h5 class="shadow-black">About This Site</h5>
1238
1239            <p class="shadow-black">
1240              
1241              <a href="https://blog.rsuter.com/info/">More ›</a>
1242            </p>
1243          </div>
1244
1245
1246          <div class="small-6 medium-3 large-3 large-offset-1 columns">
1247            
1248              
1249                <h5 class="shadow-black">Services</h5>
1250              
1251            
1252              
1253            
1254              
1255            
1256              
1257            
1258              
1259            
1260
1261              <ul class="no-bullet shadow-black">
1262              
1263                
1264                  <li >
1265                    <a href="https://blog.rsuter.com"  title=""></a>
1266                  </li>
1267              
1268                
1269                  <li >
1270                    <a href="https://blog.rsuter.com/contact/"  title="Contact">Contact</a>
1271                  </li>
1272              
1273                
1274                  <li >
1275                    <a href="https://blog.rsuter.com/feed.xml"  title="Subscribe to RSS Feed">RSS</a>
1276                  </li>
1277              
1278                
1279                  <li >
1280                    <a href="https://blog.rsuter.com/atom.xml"  title="Subscribe to Atom Feed">Atom</a>
1281                  </li>
1282              
1283                
1284                  <li >
1285                    <a href="https://blog.rsuter.com/sitemap.xml"  title="Sitemap for Google Webmaster Tools">sitemap.xml</a>
1286                  </li>
1287              
1288              </ul>
1289          </div>
1290
1291
1292          <div class="small-6 medium-3 large-3 columns">
1293            
1294
1295            <ul class="no-bullet shadow-black">
1296            
1297            </ul>
1298          </div>
1299        </div>
1300
1301      </div> -->
1302
1303
1304  <div id="subfooter">
1305    <nav class="row">
1306      <section id="subfooter-left" class="small-12 medium-6 columns credits">
1307        © Copyright 2020, Rico Suter.
1308      </section>
1309
1310      <!-- <section id="subfooter-right" class="small-12 medium-6 columns">
1311            <ul class="inline-list social-icons">
1312            
1313              <li><a href="http://github.com/RicoSuter" target="_blank" class="icon-github" title=""></a></li>
1314            
1315              <li><a href="http://twitter.com/RicoSuter" target="_blank" class="icon-twitter" title=""></a></li>
1316            
1317            </ul>
1318          </section> -->
1319    </nav>
1320  </div>
1321</footer>
1322	
1323
1324	
1325
1326
1327<script src="https://blog.rsuter.com/assets/js/javascript.min.js"></script>
1327
1328
1329
1330
1331
1332
1333
1334
1335<script>
vendor: 339 bytes, lines 1335-1341
1335
1336  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
1337  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
1338  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
1339  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
1340
1341  ga('create', '
1341UA-28224014-2
vendor: 14 bytes, lines 1341-1342
1341', 'auto');
1342  
1342ga('set', 'anonymizeIp', true);
1343  ga('send', 'pageview');
1344
1345</script>
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354</body>
1355</html>
1356

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.