17 Eylül 2020 Perşembe

Angular + .Net Core Uygulamayı IIS üzerinde aynı site üzerinde yayınlama

IIS üzerinde

angular-site.com site açılır. Add Aplication'dan aynı dizin içine "Api" klasörü seçilir. Buraya .Net Core Uygulama atılır. Daha sonra Angular uygulamada terminale

ng build --prod

yazılıp build alınır. dist klasörüne çıkan angular-site klasörü içindeki dosyalar IIS üzerindeki  angular-site.com sitesinin ana dizinine kopyalanır. Angular uygulamanın web.config aşağıdaki gibi olmalıdır. (iis rewrite eklentisini kurmak gerekiyor).

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Angular Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_URI}" pattern="api/" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="./index.html" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

 

Dikkat edilmesi gereken satır 

<add input="{REQUEST_URI}" pattern="api/" negate="true" />

 yani diyoruz ki http isteklerinde api/ ile başlayanları angulara yönlendirme bu sayede api klasörü altındaki .Net Core uygulamaya gidiyor.

Peki bunu neden yaptık? normalde angular-site.com ve api.angular-site.com şeklinde 2 uygulamayı aynı iis üzerinde yayınlamak istedik. Uygulama içinde konum almak gerektiği ve angular içinde apiye istek gittiği için iki uygulamada https olması gerekiyordu. https://manage.sslforfree.com üzerinden aldığım free ssl'ler aynı anda 1 tanesi kullanılabildiği için işime yaramadı, wildcards almadığımız için uygulama patladı. Bu yüzden aynı uygulama içinde birleştirip 1 ssl ile işimizi gördük


Hiç yorum yok:

Yorum Gönder

.net 6 mapget kullanımı

 app.UseEndpoints(endpoints => {     endpoints.MapGet("/", async context =>     {         var response = JsonConvert.Seriali...