クラスを「クエリ文字列」に変換するこの例を見ることができます
たとえば、あなたが持っているクラスでは、次のようにする必要があります。
Name = My name
Surname = My Surname
SomeData = [
{
Name = My SD0Name,
Value = My SD0Value
},
{
Name = My SD1Name,
Value = My SD1Value
}
]
Name=My%20name&Surname=My%20Surname&SomeData[0].Name=My%20SD0Name&SomeData[0].Value=My%20SD0Value&SomeData[1].Name=My%20SD1Name&SomeData[1].Value=My%21SD0Value
次に、URLを新しいテキストと連結する必要があります。
var someViewModel = new ToQueryString { Name = "My name", ... };
var querystring = someViewModel.ToQueryString();
Response.Redirect("http://somedomain.com/SomeAction?redirect=" + querystring, true);
HttpUtility.UrlEncode
拡張機能がすでにこれを扱っているので、あなたは必要ありません。
@Matthewコメントを編集します。大きなクエリ文字列がある場合は、次のリストのようなツールを使用してクエリ文字列を圧縮し、値を連結できます。
c-compress-and-decompress-stringscompression
-decompression-string-with-c-sharp
この場合、Json形式を使用できます。すでに、テキストのzipを変数で送信しています。ただし、このパラメータを受け取るアクションを変更してから実行する必要があります。
Response.Redirect("http://somedomain.com/SomeAction?redirectZip=" + jsonStringZip, true);
このブログのコード:
public static class UrlHelpers
{
public static string ToQueryString(this object request, string separator = ",")
{
if (request == null)
throw new ArgumentNullException("request");
// Get all properties on the object
var properties = request.GetType().GetProperties()
.Where(x => x.CanRead)
.Where(x => x.GetValue(request, null) != null)
.ToDictionary(x => x.Name, x => x.GetValue(request, null));
// Get names for all IEnumerable properties (excl. string)
var propertyNames = properties
.Where(x => !(x.Value is string) && x.Value is IEnumerable)
.Select(x => x.Key)
.ToList();
// Concat all IEnumerable properties into a comma separated string
foreach (var key in propertyNames)
{
var valueType = properties[key].GetType();
var valueElemType = valueType.IsGenericType
? valueType.GetGenericArguments()[0]
: valueType.GetElementType();
if (valueElemType.IsPrimitive || valueElemType == typeof (string))
{
var enumerable = properties[key] as IEnumerable;
properties[key] = string.Join(separator, enumerable.Cast<object>());
}
}
// Concat all key/value pairs into a string separated by ampersand
return string.Join("&", properties
.Select(x => string.Concat(
Uri.EscapeDataString(x.Key), "=",
Uri.EscapeDataString(x.Value.ToString()))));
}
}