Pytanie ASP.NET MVC4 ... jest "BIN" zarezerwowanym słowem kluczowym?


Mam aplikację zapytań o akcje, która zwraca dane w oparciu o symbol giełdowy.

Zasadniczo, połączenie AJAX idzie do ~/Stocks/GetStockData/{id} gdzie {id} jest symbolem zapasów.

Działa to dobrze ... ogólnie. Dzisiaj odkryłem, że akcja "Progressive Waste Solutions Ltd.", która ma symbol BIN, wybuchła. Patrząc na dane zwrotne w przeglądarce, widzę, że zwraca 404 dla tego symbolu.

Przyszło mi do głowy, że BIN może być zastrzeżonym słowem, proszącym o jakiś plik binarny lub coś podobnego. Czy tak jest? Jak obejść to bez większego wysiłku? Czy są inne słowa kluczowe, które również mogą powodować ten problem?

AKTUALIZACJA

Per Artom Neustroev może to być zastrzeżone słowo kluczowe i będzie chronione przed routingiem. Odwołał się do artykułu, który odwołuje się do strony internetowej, w której podano, że należy dodać następujące ustawienie konfiguracji w pliku konfiguracyjnym:

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    <!-- ... your other settings ... -->
  </system.web>
</configuration>

... który doprowadził mnie do dalszego rozwoju. Po uruchomieniu mojej strony, to wywołanie ajax zwróciło a 404,8 błąd:

HTTP Error 404.8 - Not Found
The request filtering module is configured to deny a path in the URL that contains a hiddenSegment section.

OK, to właściwie ma sens. Routing został ustawiony, aby nikt nie dostał się do mojego bin i zatwierdzam tego rodzaju zapobieganie.

Zastanawiam się więc, jak powiedzieć konkretnej grupie metod, które pobierają takie rzeczy BIN, lub CONFIG (teoretycznie) jest ok, jeśli istnieje dla niego określona trasa?


11
2018-04-12 12:44


pochodzenie


Wątpię w to. Po prostu przesyłasz wartość ciągu, nic nie powinno interpretować tego jako czegoś innego. Czy masz jakieś wewnętrzne komunikaty o błędach, które mogą nam pomóc? - Jeroen Vannevel
To jest faktycznie możliwe. Zobacz to pytanie: stackoverflow.com/questions/6194624/... - Artyom Neustroev
Tak. Jest to związane z filtrem zabezpieczeń, który chroni wewnętrzne pliki ASP.NET, takie jak web.config i folder Bin. Według zamieszczonego w blogu posta autorstwa Phila Haacka, stosowanie luźnych zasad dotyczących adresów URL powinno stanowić obejście tego problemu. - Jonas H
Czy jest na to jakieś źródło? Powyższe źródło i ten odnoszą się tylko do tej listy COM1-9, LPT1-9, AUX, PRT, NUL, CON. - Jeroen Vannevel
Hmmm ... dodając, że konfiguracja mnie do tego prowadzi HTTP Error 404.8 - Not Found The request filtering module is configured to deny a path in the URL that contains a hiddenSegment section. - Jeremy Holovacs


Odpowiedzi:


Oto streszczenie:

Mechanizm routingu uwzględnia ukryte katalogi i pliki (np. Web.config, / bin, itp.) I ukrywa je przed ludźmi. W przypadku niektórych z nich reguły można nieco złagodzić, ponieważ są one obsługiwane w kodzie. Te "słowa kluczowe" to: CON, COM1, COM2, COM3, COM4, LPT1, LPT2, AUX, PRN, i NUL. W rzeczywistości można się do nich odwoływać, zmieniając plik web.config jako taki:

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    <!-- ... your other settings ... -->
  </system.web>
</configuration>

jednak, inny rodzaj ukrytych słów kluczowych nie jest zarządzany w kodzie, ale raczej w IIS. Masz do wyboru dwie opcje. Możesz zmodyfikować ustawienia IIS zgodnie z sugestią Artema Neustroeva (link do to), co wydaje mi się trochę niebezpieczne, ale spodziewam się, że zadziała.

Inną opcją, z którą poszedłem, było zmienić moje wywołanie AJAX na POST metoda. Następnie wartość nie znajduje się w adresie URL, a cały problem jest omijany.

Dziękuję wszystkim, którzy doprowadzili mnie do tego punktu.


9
2018-04-12 13:45