2015-01-23 3 views
0

Я хочу добавить несколько пар значений строки запроса в url, форматируя регулярную строку, а затем добавляя ее к текущей строке запроса. Потому что, насколько мне известно, нет способа изменить фактическую Request.QueryString. Поэтому я пытаюсь добавить kvp: s в строку запроса, как показано ниже. Я искал StackOverflow, но не смог найти ответ, который соответствует моей проблеме.Добавить пары значений ключа в строку запроса

protected void ServiceSelectionChanged(object sender, EventArgs e) 
{ 
    var regNr = registrationNumber.Text; 
    var selectedServiceType = SelectedServiceType.ToString("D"); 

    string url = string.Empty; 
    BookingHelpers.FormatQueryStringUrl(this.Request, "serviceType", selectedServiceType, ref url); 
    BookingHelpers.FormatQueryStringUrl(this.Request, "regNr", regNr, ref url); 
    Server.Transfer(url, false); 
} 

public static void FormatQueryStringUrl(HttpRequest request, string key, string value, ref string url) 
{ 
    if (string.IsNullOrEmpty(url)) 
    { 
     url = request.Url.PathAndQuery; 
    } 
    if (url.Contains("?")) 
    { 
     if (url.Contains("&" + key)) 
     { 
      string currentValue = request.QueryString[key]; 
      url = url.Replace("&" + key + "=" + currentValue, "&" + key + "=" + value); 
     } 
     else 
     { 
      url = String.Format(request.Url.PathAndQuery + "&" + key + "={0}", value); 
     } 
    } 
    else url = String.Format(request.Url.PathAndQuery + "?" + key + "={0}", value); 
} 

Это однако использует Request.QueryString каждый раз, поэтому первый kvp перезаписывается. Поэтому мой вопрос: как мне сделать эту работу, чтобы я мог добавить обе пары значений ключа в строку запроса?

+0

почему вы не можете построить объект и сериализации и отправить его в JSON строку, если она меньше символов .. – Saravanan

+0

я понятия не имею, что вы имеете в виду , Прости. – David

ответ

0

Я нашел ответ на переполнение стека, которые помогли мне:

How to build a query string for a URL in C#?

Хотя я также необходимо проверить, если URL уже строку запроса в нем, поэтому я изменил его на что-то вроде этого ,

public static string ToQueryString(string url, NameValueCollection nvc) 
    { 
     StringBuilder sb; 

     if (url.Contains("?")) 
      sb = new StringBuilder("&"); 
     else 
      sb = new StringBuilder("?"); 

     bool first = true; 

     foreach (string key in nvc.AllKeys) 
     { 
      foreach (string value in nvc.GetValues(key)) 
      { 
       if (!first) 
       { 
        sb.Append("&"); 
       } 

       sb.AppendFormat("{0}={1}", Uri.EscapeDataString(key), Uri.EscapeDataString(value)); 

       first = false; 
      } 
     } 

     return url + sb.ToString(); 
    } 

И использование вместо стали:

var queryParams = new NameValueCollection() 
{ 
    { "isaServiceType", selectedIsaServiceType }, 
    { "regNr", regNr } 
}; 

var url = ToQueryString(Request.Url.PathAndQuery, queryParams); 
Смежные вопросы