2014-04-12 13 views
11

Mam aplikację zapytań o akcje, która zwraca dane w oparciu o symbol giełdowy.ASP.NET MVC4 ... jest "BIN" zastrzeżonym słowem kluczowym?

Zasadniczo połączenie AJAX przechodzi na ~/Stocks/GetStockData/{id}, gdzie {id} jest symbolem giełdowym.

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ć zarezerwowanym 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?

UPDATE

Per Artem Neustroev, to może być zastrzeżony słów kluczowych, i będzie chroniony przed routingu do. On odwołuje artykuł, który odwołuje się do strony internetowej, która podaną dookoła było dodać następujące ustawienie konfiguracji w pliku konfiguracyjnym:

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

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

... co dało mi dalej. Po uruchomieniu mojej strony z tym, ajax wywołanie zwróciło 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 faktycznie jakoś sens. Routing został ustawiony, aby uniemożliwić komuś dostęp do mojego katalogu bin i popieram tego rodzaju zapobieganie.

Zastanawiam się, jak powiedzieć określonej grupie metod, że pobieranie rzeczy takich jak BIN lub CONFIG (teoretycznie) jest ok, jeśli istnieje zdefiniowana trasa dla niego?

+0

Mocno w to wątpię. 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? –

+2

To jest rzeczywiście możliwe. Zobacz to pytanie: http://stackoverflow.com/questions/6194624/asp-net-mvc3-routing-reserved-words –

+0

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. –

Odpowiedz

9

więc o to streszczenie:

Mechanizm routingu uwzględnia ukrytych plików i katalogów (jak web.config,/bin, etc) 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" są: CON, COM1, COM2, COM3, COM4, LPT1, LPT2, AUX, PRN i NUL. Mogą to być rzeczywiście odwołuje ze zmianą do pliku web.config jako takie:

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

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

Jednak, drugi typ ukrytych słów kluczowych nie są zarządzane w kodzie, ale raczej w IIS. Masz do wyboru dwie opcje. Możesz zmodyfikować ustawienia IIS zgodnie z sugestią Artema Neustroeva (on łączy się z this), 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 metodę POST. 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.

Powiązane problemy