2014-04-12 16 views
11

Ho un'applicazione di query di borsa che restituisce i dati in base a un simbolo di magazzino.ASP.NET MVC4 ... è "BIN" una parola chiave riservata?

Fondamentalmente, la chiamata AJAX va a ~/Stocks/GetStockData/{id} dove il {id} è il simbolo di serie.

Questo funziona bene ... in generale. Oggi ho scoperto che il titolo "Progressive Waste Solutions Ltd.", che ha un simbolo di BIN, è esploso. Guardando i dati di ritorno nel browser, vedo che restituisce un 404 per questo simbolo.

Mi è venuto in mente che BIN potrebbe essere una parola riservata, che richiede un file binario o qualcosa del genere. È questo il caso? Come posso aggirare questo senza un sacco di sforzo? Ci sono altre parole chiave che causeranno anche questo problema?

UPDATE

Per Artyom Neustroev, questo potrebbe essere una parola chiave riservata, e sarebbero stati protetti dal routing a. Egli fa riferimento un articolo che fa riferimento un sito web che ha dichiarato il modo per aggirare questo è stato quello di aggiungere la seguente impostazione di configurazione nel file di configurazione:

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

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

... che mi ha fatto ulteriormente. Al momento in esecuzione il mio sito con questo, la chiamata ajax restituito un errore 404,8:

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, questo rende di fatto sorta senso. Il routing è stato impostato per impedire a qualcuno di entrare nella mia directory bin e approvo questo tipo di prevenzione.

Quindi mi chiedo come dire ad un particolare gruppo di metodi che ottenere cose come BIN o CONFIG (teoricamente) è ok se c'è un percorso definito per questo?

+0

Ne dubito fortemente. Stai solo trasmettendo un valore stringa, niente dovrebbe interpretarlo come qualcos'altro. Hai qualche messaggio di errore interno che potrebbe aiutarci? –

+2

Questo è effettivamente possibile. Vedi questa domanda: http://stackoverflow.com/questions/6194624/asp-net-mvc3-routing-reserved-words –

+0

Sì. È correlato al filtro di sicurezza che protegge i file ASP.NET interni come web.config e la cartella Bin. Secondo il post sul blog collegato di Phil Haack, l'utilizzo di regole URL rilassate dovrebbe essere una soluzione alternativa. –

risposta

9

ecco una sinossi:

Il meccanismo di instradamento tiene conto nascosti directory e file (come web.config,/bin, ecc) e li nasconde dalla gente. Per alcuni di questi, le regole possono essere leggermente rilassate, poiché vengono gestite nel codice. Queste "parole chiave" sono: CON, COM1, COM2, COM3, COM4, LPT1, LPT2, AUX, PRN e NUL. Questi possono in realtà essere indicati con una modifica al file web.config in quanto tale:

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

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

Tuttavia, l'altro tipo di parole chiave nascoste non sono gestiti in codice, ma piuttosto in IIS. Hai due opzioni per questi. È possibile modificare le impostazioni di IIS come suggerito da Artyom Neustroev (che collega a this), che mi sembra un po 'pericoloso, ma mi aspetto che funzioni.

L'altra opzione, quella con cui sono andato, era di cambiare la mia chiamata AJAX a un metodo POST. Quindi il valore non è nell'URL e l'intero problema viene aggirato.

Grazie a tutti quelli che mi hanno portato a questo punto.

Problemi correlati