Na laptopie rozwoju za pomocą lokalnego IIS z Visual Studio wszystko działa dobrze. Na serwerze, w którym opublikowałem aplikację za pośrednictwem Azure Devops Aplikacja Blazor nie załaduje błędu JavaScript

System.ArgumentException: The URI 'http://10.144.2.7/SincroADR_Api/' is not contained by the base URI 'http://10.144.2.7/SincroADR_API/'.

W index.html aplikacji klienta Blazor mam ten bazowy adres URL

<base href="/SincroADR_API/" />

SINCROADR_API to projekt API internetowej .NET CORE 3.1, serwer IIS jest wersja 7.5 (Win 2k8 R2), IIS Lokal jest 10 (Win 10).

Wszystkie pliki blazor (JS, webassembly) są prawidłowo pobierane w przeglądarce, ale nie mogę zrozumieć, dlaczego w lokalnym IIS działa. Jakieś pomysły ?

1
fededim 7 wrzesień 2020, 10:31

1 odpowiedź

Najlepsza odpowiedź

Atrybut HREF w tagu bazowym musi pasować do odpowiedniej części adresu URL żądania, , w tym przypadku symboli . Jeśli spojrzysz na wiadomość o błędzie, część żądanego adresu URL nie pasuje do "_api" części podstawowej href.

Jest to bardzo niewygodny błąd. Możesz pracować wokół niego, modyfikując bazę HREF, aby dopasować adres URL, który został użyty do poruszania się do aplikacji.

W pliku wwwroot / index.html umieść następujący skrypt, zanim Blazor Webassembly zawiera:

<script>
    let baseTag = document.getElementsByTagName('base')[0];
    let baseHref = baseTag.getAttribute('href');
    let href = window.location.pathname.substr(0, baseHref.length)
    if (!href.endsWith('/')) href += '/';
    baseTag.setAttribute('href', href);
</script>
1
andris 22 październik 2020, 09:23