NET5 + Angular - ten sam endpoint raz zwraca kod 200, a raz 404

0

Witam.
Bawiłem się wczoraj tymi widokami/filtrami. Doszedłem do momentu, w którym stwierdziłem, że mogę wrzucić na serwer do testowania i zaczęły się pewne problemy.

Działa - dostaje kod 200 (Ok)
Angular Route /products
API Route /api/filters/getuserfilter?path=column:products&json

Nie działają - dostaje kod 404 (Not Found)
Angular Route /customers
API Route /api/filters/getuserfilter?path=column:customers&json

Angular Route /documents/302
API Route /api/filters/getuserfilter?path=column:documents:302&json

Angular Route /documents/306
API Route /api/filters/getuserfilter?path=column:documents:306&json

Ten sam endpoint, różni się tylko wartościami parametrów. W jednym route "widoczny", a w reszcie już nie. Dzieje się tak tylko na serwerze (pod IIS). Nie mam tego problemu na debugu, na localhost dlatego wyszedłem z założenia, że mogłem wrzucić na serwer.

Co najciekawsze. Odpytuje również ten sam endpoint o filtry
Angular Route /customers
API Route /api/filters/getuserfilter?path=filter:customers&json

endpoint_404.png

0

A co jest w logach IIS ?

0

Teoretycznie nic co by mogło mnie nakierować na rozwiązanie. Przykład poprawnych zapytań i z błędem 404.

2021-04-01 07:26:14 192.168.10.19 GET /api/filters/getuserfilter path=filter:products&json=%7B%22status%22:%22%22,%22type%22:%22%22,%22page%22:0,%22limit%22:10,%22active%22:%22%22,%22direction%22:%22%22,%22warehouse%22:1,%22search%22:%22%22,%22price%22:%22%22,%22groups%22:%22%22,%22state%22:0,%22selectedView%22:%220%22%7D 2222 - 83.144.69.194 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/89.0.4389.90+Safari/537.36+Edg/89.0.774.63 http://adres.strony.pl/products 200 0 0 62
2021-04-01 07:26:14 192.168.10.19 GET /api/filters/getuserfilter path=column:products&json=%5B%7B%22selected%22:true,%22id%22:%22position%22,%22name%22:%22LP%22,%22disabled%22:true%7D,%7B%22selected%22:true,%22id%22:%22code%22,%22name%22:%22Kod%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22name%22,%22name%22:%22Nazwa%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22price%22,%22name%22:%22Cena%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22value%22,%22name%22:%22Warto%C5%9B%C4%87%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22valueBuyPrice%22,%22name%22:%22Warto%C5%9B%C4%87%20zakupu%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22quantity%22,%22name%22:%22Ilo%C5%9B%C4%87%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22reservations%22,%22name%22:%22Rezerwacje%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22available%22,%22name%22:%22Ilo%C5%9B%C4%87%20dost%C4%99pna%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22EAN%22,%22name%22:%22EAN%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22currency%22,%22name%22:%22Waluta%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22vatRate%22,%22name%22:%22Stawka%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22typeText%22,%22name%22:%22Typ%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22unit%22,%22name%22:%22JM%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22actions%22,%22name%22:%22Akcje%22,%22disabled%22:true%7D%5D 2222 - 83.144.69.194 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/89.0.4389.90+Safari/537.36+Edg/89.0.774.63 http://adres.strony.pl/products 200 0 0 31

2021-04-01 07:26:23 192.168.10.19 GET /api/filters/getuserfilter path=filter:customers&json=%7B%22page%22:0,%22limit%22:10,%22active%22:%22%22,%22direction%22:%22%22,%22search%22:%22%22,%22selectedView%22:%220%22,%22group%22:%22%22,%22status%22:%22%22%7D 2222 - 83.144.69.194 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/89.0.4389.90+Safari/537.36+Edg/89.0.774.63 http://adres.strony.pl/customers 200 0 0 31
2021-04-01 07:26:23 192.168.10.19 GET /api/filters/getuserfilter path=column:customers&json=%5B%7B%22selected%22:true,%22id%22:%22position%22,%22name%22:%22LP%22,%22disabled%22:true%7D,%7B%22selected%22:true,%22id%22:%22code%22,%22name%22:%22Kod%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22name%22,%22name%22:%22Nazwa%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22vatNumber%22,%22name%22:%22NIP%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22zipCode%22,%22name%22:%22Kod%20pocztowy%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22regon%22,%22name%22:%22REGON%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22pesel%22,%22name%22:%22PESEL%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22group%22,%22name%22:%22Grupa%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22city%22,%22name%22:%22Miasto%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22street%22,%22name%22:%22Ulica%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22builingNumber%22,%22name%22:%22Nr%20domu%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22apartmentNumber%22,%22name%22:%22Nr%20lokalu%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22phone1%22,%22name%22:%22Telefon1%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22phone2%22,%22name%22:%22Telefon2%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22phone3%22,%22name%22:%22Telefon3%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22email%22,%22name%22:%22Email%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22countryCode%22,%22name%22:%22Kod%20kraju%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22vatStatus%22,%22name%22:%22Status%20VAT%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22provider%22,%22name%22:%22Dostawca%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22competition%22,%22name%22:%22Konkurencja%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22recipient%22,%22name%22:%22Odbiorca%22,%22disabled%22:false%7D,%7B%22selected%22:false,%22id%22:%22partner%22,%22name%22:%22Partner%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22paymentName%22,%22name%22:%22Forma%20p%C5%82atno%C5%9Bci%22,%22disabled%22:false%7D,%7B%22selected%22:true,%22id%22:%22currency%22,%22name%22:%22Waluta%22,%22disabled%22:false%7D%5D 2222 - 83.144.69.194 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/89.0.4389.90+Safari/537.36+Edg/89.0.774.63 http://adres.strony.pl/customers 404 15 0 31
2

Zobacz jaką masz ustawioną max długość URL dla requestu. I sprawdź czy to zapytanie mieści się w tym limicie.

0

Maksymalna liczba segmentów adresu URL = 32 ale nie wiem w jakiej jednostce to jest i jak mam sprawdzić czy się mieści w limicie 🤦‍♂️

limits_iis.png

0


Coś takiego powinno gdzieś być.
Ew możesz sprawdzić czy krótsze zapytania przechodzą :P

0

Może kwestie mapowania parametrów w endpoint'ach? Może nie są one takie same. Tak BTW ja generalnie stosuje podejście, że jeżeli mam takie wyszukiwanie to to nie jest GET tylko POST.

0

@Schadoow: Zwiększenie tego limitu nic nie dało. Dalej ten sam błąd. Wszystko wskazuje na to, że będę musiał przerobić to na POST (tak jak napisał @mariano901229) żeby nie wysyłać tego w url...

Krótsze przechodzą. Bo radzi sobie z kolumnami Products a już nie radzi sobie z Customers i Documents, ponieważ w tych widokach kolumn jest dwa razy więcej.

0

POST nie służy do pobierania danych...
Jeżeli to nie jest problem z samą aplikacją to winy szukałbym w filtrach IIS'a. Niestety jest to jeden z najbardziej ch...jowych serwerów. Jak masz możliwość to przejdź na coś innego bo same są z nimi problemy i ciężko się to konfiguruje i debuguje.

0

Masz rację w kwestii POST. Co do IIS'a to chwilowo jestem na niego skazany. Używam go tylko do udostępnienia ludziom do "testów". Na ten moment udało mi się to naprawić dopisując do web.config to:

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="false">
            <requestLimits maxAllowedContentLength="30000000" maxUrl="40960" maxQueryString="20480" />
        </requestFiltering>
    </security>
</system.webServer>

Maksymalna długość url była dobrym nakierowaniem także oznaczam jako rozwiązanie ;-)

PS.
Z czasem przejdę na inny sposób hostowania.

0

Pokaż kod kontrolera. Tam się kryje odpowiedź.

0
    [Route("api/filters/[action]")]
    [ApiController]
    [Authorize]
    public class FiltersController : ControllerBase
    {
        private readonly IUserFilterService _userFilterService;

        public FiltersController(IUserFilterService userFilterService)
        {
            _userFilterService = userFilterService;
        }

        [HttpGet]
        public async Task<string> GetUserFilter([FromQuery] string path, [FromQuery] string json)
        {
            var userId = int.Parse(User.Claims.FirstOrDefault(x => x.Type == "userId").Value);
            var database = User.Claims.FirstOrDefault(x => x.Type == "database").Value;
            return await _userFilterService.GetUserFilter(database, path, userId, json);
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1