Используя Request.QueryString, косая черта (/) добавляется к последней строке запроса, когда она существует в первой строке запроса - PullRequest
3 голосов
/ 03 марта 2011

это мой первый пост на stackoverlow, и я не смог найти решение этой проблемы ни в одном другом сообщении, поэтому вот оно:

У меня есть веб-страница, которая отправляет две строки запроса в URL:

example.aspx?name=<%=name%>&sku=<%=sku%>

Затем я собираю значения, используя Request.QueryString["name"]; и Request.QueryString["sku"];

Когда я просматриваю URL в источнике страницы, отправляющей строки запроса, все выглядит хорошо, но если«name» содержит косую черту (/), которая каким-то образом будет прикреплена к концу «sku», когда я получу значение строки запроса.Я пытался заменить / на% 2F, но это не работает.Если строка запроса «name» не имеет косой черты, все выглядит правильно.

Есть идеи?

Редактировать: В итоге мне пришлось дважды кодировать (server.urlencode) и дважды декодировать, чтобы он работал правильно.Спасибо за вашу помощь!

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

На самом деле, вы должны кодировать свои значения для URL с помощью HttpServerUtility.UrlEncode , метод:

example.aspx?name=<%=Server.UrlEncode(name)%>&sku=<%=Server.UrlEncode(sku)%>

Кодировка URL гарантирует, что все браузеры будет правильно передавать текст в URL строки. Символы, такие как вопрос знак (?), амперсанд (&), знак косой черты (/), и пробелы могут быть усечены или испорчен некоторыми браузерами. Как результат, эти символы должны быть закодированы в тегах или в запросе строки, где могут быть строки повторно отправлено браузером в запросе строка.

EDIT:

давайте проверим это с указанными вами значениями: name = Bellagio™ 16 1/2" High Downbridge Outdoor Wall Light, sku = 46910: сначала я создал страницу с 2 свойствами:

public string Name
{
    get
    {
        return "Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light";
    }
}

public string Sku
{
    get
    {
        return "46910";
    }
}

и добавьте определение ссылки на страницу:

<a href='1.aspx?name=<%=Server.UrlEncode(Name)%>&sku=<%=Server.UrlEncode(Sku)%>'>
    this is a link
</a>

и затем захватите эти значения (сначала нажмите на ссылку):

protected void Page_Load(object sender, EventArgs e)
{
    var name = Request.QueryString["name"];
    var sku = Request.QueryString["sku"];
}

эти значения точно такие же, как вы указали: Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light и 46910.

К сожалению, мне не удалось воспроизвести неверный URL, который вы разместили в своем первом комментарии: LifeSizePDF.aspx?productname=Bellagio&amp;%238482%3b+16+1%2f2&amp;quot%3­b+High+Downbridge+Outdoor+Wall+Light&amp;shortsku=46910%2f

2 голосов
/ 03 марта 2011

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

Обратите внимание, что есть по крайней мере два способа сделать это легко, например, используя статический класс HttpUtility или, если используется контекст Page, использовать свойство Server:

var encodedValue = HttpUtility.UrlEncode(rawValue);

var encodedValue = Server.UrlEncode(rawValue);
0 голосов
/ 03 марта 2011

Вы можете просто обрезать конечное значение запроса sku:

Request.QueryString["sku"].TrimEnd( '/' );
...