Sto provando a supportare alcuni URL legacy e li associo alle azioni del controller. Gli URL simile a questa:Percorsi MVC con caratteri speciali
/~Home+Office~Note+Pads.html
Ecco il mio percorso:
routes.MapRoute(
"LegacyCategory",
"{path}.html",
new { controller = "LegacyCI", action = "Index", }
);
Ecco il (inizi) il mio controller trattare con loro:
public class LegacyCIController : Controller {
public ActionResult Index(string path) {
if (path == "~Address+Labels") {
return RedirectToAction("Display", "Category", new { id = "AddressLabels" });
}
return RedirectToAction("Index", "Category");
}
}
Se ho impostato un punto di interruzione LegacyCIController, e ho impostato la mia pagina iniziale su XXX.html, il punto di interruzione colpisce (e non riesce il if
) e la vita è buona. Ma quando provo a impostare la pagina iniziale su ~Address+Labels.html
, nessun punto di interruzione viene colpito, e Chrome mi vomita e mi mostra una pagina che dice "oops, questa pagina sembra essere rotta".
Sto eseguendo questa pagina tramite IIS 7 sul mio computer, non in Visual Studio.
Questo URL è così malformato che una normale rotta MVC non può nemmeno gestirlo, o sto facendo qualcos'altro di sbagliato?
Wow, questo è un bel nome di file. – Tejs
@Tejs - sì, sì lo è. Trattare con materiale legacy è una delle vere gioie della vita :) –
La mia teoria è che IIS sta rimbalzando la richiesta - Penso che IIS7 abbia un set di caratteri URL nella lista nera. – Tejs