Как прочитать строку запроса, если она содержит некодированные данные? - PullRequest
1 голос
/ 16 февраля 2012

У меня есть следующая страница asp.net, которая принимает ключ строки запроса "url", значение которого может быть незашифрованным url:

http://localhost:4104/WebSiteForTest/TinyUrl.aspx?url=http://www.google.co.uk/#hl=en&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=2803373l2803701l2l2803826l4l4l0l0l0l0l188l453l0.3l3l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=883

Теперь с этой страницы, как можно было бы прочитать текст после ".aspx?"?

Я проверил свойство Request.Url.AbsoluteUri, и оно показало только

"http://localhost:4104/WebSiteForTest/TinyUrl.aspx?url=http://www.google.co.uk/"

Я также проверил строку Request.QueryString с кодом ниже:

 private void getQueryString()
    {
        var sb = new StringBuilder();

        var queryStringCount = Request.QueryString.Keys.Count;

        for (int keyIndex = 0; keyIndex < queryStringCount; keyIndex++)
        {
            sb.Append(Request.QueryString.Keys[keyIndex]).Append("=").Append(Request.QueryString[keyIndex]);
            if (keyIndex != (queryStringCount - 1))
            {
                sb.Append("&");
            }
        }
    }

Однако код после "#" не отображается ни в одной строке запроса.

как можно было бы прочитать текст после ".aspx?"?

если вы говорите, что это невозможно, как Google использует «#» в своем URL, тогда когда вы что-то ищете?!

http://www.google.co.uk/#hl=en&site=&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=3317l3630l0l3755l4l4l0l0l0l0l125l391l3.1l4l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=849

Спасибо

Ответы [ 4 ]

4 голосов
/ 16 февраля 2012

Невозможно получить значение после привязки на стороне сервера, вы можете проверить это с помощью fiddler или чего-то подобного, вы должны разобраться с этим на клиенте. Браузер просто удаляет все после привязки.

Получение якорной ссылки в URL для ASP.Net

c # получить полный URL с "#"

Обновление:

Я не знаю, как именно Google это делает, но если вы посмотрите с помощью fiddler после первоначального запроса, там будет другой без #, вот журнал fidller для запроса вашего вопроса:

enter image description here

так что мой совет - посмотрите с fiddler, как это делает Google, или, возможно, задайте другой вопрос

0 голосов
/ 16 февраля 2012

Я предполагаю, что вы используете C # для этого. Вы можете легко получить параметры и их значения, просматривая объект запроса. Или в этом случае, поскольку вы знаете имя параметра, просто сделайте это:

String url = Request.QueryString ["url"];

Более подробную информацию о итерации параметров вашего запроса можно найти здесь .

0 голосов
/ 16 февраля 2012

Тип Uri также работает.

String yourHttpUri ="....";
Uri yourURI = new Uri(yourHttpUri);
yourURI.query // "?url=http://www.google.co.uk/"
yourURI.fragment // "#hl=en&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=2803373l2803701l2l2803826l4l4l0l0l0l0l188l453l0.3l3l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=883"

Edit:

Вы пробовали Request.Url.ToString(); (и создаете новый Uri из результата)

0 голосов
/ 16 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...