HTTP грешка 404.11 не е намерена: двойна екранираща последователност

Имам проект 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 Method

В този пример низът „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