2010-07-08 10 views
16

intraprendere le seguenti azioni di controlloPerché un trailing% (in questo caso i dati validi) 20 uccidere asp.net mvc di routing

public ActionResult NextBySURNAME(int id, string data) 
    { 
     //code to process the data and edit the id accoringly not written yet 
     return RedirectToAction("Edit", new { id = id }); 
    } 

se io lo chiamo con /myController/NextBySURNAME/12/Smith% 20Simon

allora funziona bene (in questo disco editing caso 12) ma

/myController/NextBySURNAME/12/Smith% 20

mi dà un 404

Ora so che in alcuni casi nel mio problema lo spazio bianco finale è significativo, quindi non voglio solo ritagliarlo. Allora, perché questa rotta si interrompe?

 routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}/{data}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional, data=UrlParameter.Optional } // Parameter defaults 
     ); 
+0

Robert: So che il * codice * sembra essere C# ma il problema del trailing% 20 di interrompere il routing è (probabilmente) non specifico per la lingua. Preferirei non taggare questo C# – Andiih

+2

Wow, l'ho appena provato, è interessante ... – Aren

+1

@Andiih & Robert: '.net' probabilmente sarebbe un tag più descrittivo di' C# ', tuttavia ho trovato questa domanda perché io cercavo 'C#' – Aren

risposta

8

Così ho fatto qualche debug percorso e ha scoperto che le rotte che terminano con uno spazio non erano nemmeno in corso di valutazione da parte mia app MVC. Pertanto, IIS deve gestire queste richieste in modo insufficiente.

Ho aggiunto una regola di riscrittura a IIS 7.5 per abbinare gli spazi finali e riscriverli come lo stesso url senza spazio. Non sono soddisfatto di questa soluzione, ma non sono riuscito a trovare una spiegazione sul motivo per cui IIS gestisce erroneamente gli URL con spazi finali.

+1

Sembra che qualcuno debba aggiungere, in sostanza , un 'Trim()' da qualche parte all'interno di IIS. :) – JYelton

+0

@JYelton & BC, che cosa succede se si desidera cercare una forma simile a: '" Ciao "' Se si verifica il pareggio, ciò si interromperà. Il routing dovrebbe funzionare come previsto e produrre una stringa (nel caso OPs) di "Smith" per poterlo gestire in seguito. – Aren

+0

Sono d'accordo. Come si ottiene IIS per giocare bene? –

1

Penso che il modo in cui i caratteri sfuggiti siano gestiti sia modificabile in .NEt 4.0, ma non l'ho provato io stesso. Vedere http://msdn.microsoft.com/en-us/library/system.uri.aspx.

Andrews risposta a URL-encoded slash in URL

anche How to create a Uri instance parsed with GenericUriParserOptions.DontCompressPath

Questo è tutto selvaggio solo indovinare, ma forse aiuta.

+0

Grazie MF. Informazioni utili lì, proverò a sperimentare con le tecniche, ma vale la pena notare che la SOLO% 20 che lo spezza, altri caratteri fuggiti non hanno lo stesso effetto. – Andiih

Problemi correlati