2011-03-03 2 views
3

это мой первый пост в stackoverlow, и я не мог найти решение этого в любых других сообщениях, так что здесь идет:Использование Request.QueryString, slash (/) добавляется к последней строке запроса, когда она существует в первом querystring

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

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

Я тогда собирать значения с помощью Request.QueryString["name"]; и Request.QueryString["sku"];

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

Любые идеи?

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

+0

@Zack - фиксация строки запроса с Server.UrlEncode, как уже упоминалось, должны быть использованы. Однако что-то еще не так. Корень проблемы заключается в том, что если значение 'name' имеет косую черту (/), тогда косая черта добавляется к значению' sku'. Вам нужно посмотреть, как вы задаете параметры querystring 'name' и' sku', чтобы увидеть, почему косая черта добавляется в 'sku'. –

ответ

4

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

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

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

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.

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

+0

+1 для ссылки и встроенного кодирования для хорошего решения для копирования и вставки. :) –

+0

Я пробовал это, и это результат (у него еще есть/в нем): action = "LifeSizePDF.aspx? Productname = Bellagio &% 238482% 3b + 16 + 1% 2f2 & quot% 3b + High + Downbridge + Outdoor + Wall + Light & shortsku = 46910% 2f " – Zach

+0

@ Zach: можете ли вы предоставить свои исходные значения для' sku' и 'productname'? Кажется, что ценности исказились. – Alex

0

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

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

это не будет работать, поскольку добавление/будет означать каталог ... –

+0

он сказал, чтобы «обрезать» конец (завершающий) косой чертой, а не добавить еще одну. – jonezy

+0

@ Харш, я не уверен, что вы имеете в виду. Не могли бы вы немного расширить? –

2

использовать кодировку URL для форматирования значений соответственно, при условии, слэш во имени носит умышленный характер и хотели бы быть извлечены с концом результат.

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

var encodedValue = HttpUtility.UrlEncode(rawValue); 

var encodedValue = Server.UrlEncode(rawValue); 
+0

+1, потому что вы избили меня минутой;) – Alex