Ошибка HTTP 404.11 Not Found: двойная escape-последовательность

У меня есть проект C # MVC 3, который использует OpenSearch для поиска продукта. Искать можно, если поисковое слово состоит из одного слова, но если я наберу что-то вроде canned food, я получу HTTP Error 404.11. Я знаю, что один простой способ исправить это - установить allowDoubleEscaping равным true в webconfig. Но мой друг предложил мне использовать escaping url, который заменил бы space на %20 (поправьте меня, если я ошибаюсь, потому что я новичок в этом)

Я видел много примеров, в которых говорится об использовании UrlPathEncode, но я не уверен, куда добавить этот код в свой проект.

В основном я просто спрашиваю, как я могу это сделать:

localhost:94830/Home/Search/canned food

в это

localhost:94830/Home/Search/canned%20food 

или замените пробел другим символом

localhost:94830/Home/Search/canned-food

person SherCoder    schedule 15.08.2012    source источник


Ответы (3)


Вы можете использовать System.Uri.EscapeUriString следующим образом:

Uri.EscapeUriString("double  space") //double%20%20space

и, поскольку он также доступен в «профиле клиента», он более портативен, чем использование System.Web API.

person spender    schedule 15.08.2012
comment
Спасибо, но где мне добавить этот код? Я имею в виду, в каком файле должен быть этот код? - person SherCoder; 15.08.2012
comment
Просто передайте поисковый запрос через это, прежде чем инициировать фактический поиск (или OpenSearch каким-то образом усложняет это?) - person Kjartan; 15.08.2012

Вы можете сделать это с помощью метода HttpServerUtility.UrlEncode.

В этом примере строка «Примеры ASP.NET» кодируется как «ASP.NET + Примеры».

Server.UrlEncode("ASP.NET Examples");
person user854301    schedule 15.08.2012

В моем случае я обнаружил, что у меня есть функция JavaScript, которая вызвала мою страницу ASPX, и когда она создает URL-адрес, я случайно поместил URL-адрес следующим образом:

var url = forwardpage + "&t=" + token;

Как известно, первый параметр в запросе страницы разделяется символом? не &, поэтому из-за простой опечатки HTTP 404.11. Вместо этого должно было быть:

var url = forwardpage + "?t=" + token;
person Jay Imerman    schedule 28.03.2020