Próbuję obsługiwać starsze adresy URL i mapować je do działań kontrolerów. Adresy URL wyglądać tak:Trasy MVC ze znakami specjalnymi
/~Home+Office~Note+Pads.html
Oto moja droga:
routes.MapRoute(
"LegacyCategory",
"{path}.html",
new { controller = "LegacyCI", action = "Index", }
);
Oto (początki) mój sterownik do radzenia sobie z nimi:
public class LegacyCIController : Controller {
public ActionResult Index(string path) {
if (path == "~Address+Labels") {
return RedirectToAction("Display", "Category", new { id = "AddressLabels" });
}
return RedirectToAction("Index", "Category");
}
}
Jeżeli ustawić punkt przerwania w LegacyCIController, a ja ustawiłem stronę początkową na XXX.html, trafienia punktu przerwania (i nieudane if
) i życie jest dobre. Ale kiedy próbuję ustawić stronę startową na ~Address+Labels.html
, nie ma żadnego punktu przerwania, a Chrome po prostu wymiata i pokazuje mi stronę z napisem "Ups, ta strona wygląda na uszkodzoną".
Używam tej strony przez IIS 7 na moim komputerze, a nie Visual Studio.
Czy ten adres URL jest tak źle sformułowany, że zwykła trasa MVC nie może go obsłużyć lub czy robię coś innego?
Wow, to całkiem niezła nazwa pliku. – Tejs
@Tejs - tak, tak jest. Radzenie sobie ze starszymi rzeczami jest jedną z prawdziwych radości życia :) –
Moja teoria jest taka, że IIS odrzuca żądanie - myślę, że IIS7 ma zestaw znaków na czarnej liście URL. – Tejs