ASP.NET и “спецсимволы” в URL
Вообще, если будет настроение, надо бы написать пост, почему же ASP.NET (который не MVC) плох. В целом, как технология.
Ну а пока просто расскажу как непонятная хрень осложняет жизнь.
На днях у нас нашелся странный баг: если в URL, в пути, содержится символ ‘&’ то ничего не работает и возвращается 400 Bad Request.
Т.е. вот такая вот ссылка не работает: http://foo.com/candy/m&ms/ , хотя ‘&’ не является запрещенным символом.
Оказывается - это веселое legacy, которое окончательно так и не исправили. Предполагалось, что если убрать вот такие вот символы из запросов, то приложение станет сильно безопаснее.
Чтобы убрать эти проверки, придется менять реестр в двух местах. Что нам не подходит, так как нас на production сервера не пустят, плюс они боятся менять параметры, которые могут повлиять на безопасность. Пришлось переписывать логику генерации ссылок, что бы такие вот параметры шли через query strings, что немного усложнило саму логику и, к сожалению, заняло определенное время на борьбу с ветряной мельницей.
Предсказывая возможный вопрос, параметр этот может принимать значения из [a-zA-Z&: ], так что раньше необходимости деления параметров по категориям не было.
Ах да, самое главное забыл - мы получаем 400 Bad Request, даже если используются URL Rewrite, т.е. разобранная ссылка уже не содержит амперсанд в пути.
Т.е. если исходная ссылка была: http://foo.com/candy/m&ms/ , разобраная: http://foo.com/Default.aspx?candy=m&ms , то ошибка все равно останется.