将Request.InputStream中的值格式化为Asp.net MVC中的有效JSON

时间:2017-05-10 12:26:56

标签: c# asp.net json asp.net-mvc

嗨,我从Request.InputStream

得到了一个字母串
searchbtn=&__RequestVerificationToken=Cj00sURmj5hhazrlcx72-ahnRwOFhZzMOO5hdMH8epMUFTkicNYlKy9Fs3nZdq_Whzr3I57zZqsncWybsNrQ47Sg4vGQB6GbqRPrL3D0o3Q1
&ClientID=274&CompanyName=&PerformedDate=&X-Requested-With=XMLHt
tpRequest

有没有把这个字符串格式化为有效JSON字符串的技巧?

2 个答案:

答案 0 :(得分:1)

您可以做的最好的事情就是让模型绑定器通过让您的操作接受数据作为类实例来处理它。例如:

public class MyViewModel
{
    public int ClientID { get; set; }
    public string CompanyName { get; set; }
    public DateTime? PerformedDate { get; set; }
}

然后:

public ActionResult Foo(MyViewModel model)

您没有任何理由直接访问请求InputStream。如果您出于某种原因需要它作为JSON,您可以简单地执行以下操作:

var json = Json.Encode(model);

除此之外,您只需手动解析它并从中创建一个对象。例如:

var data = inputString
    .Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => s.Split(new[] { '=' }))
    .ToDictionary(d => d[0], d => d[1]);

然后,您可以通过Json.Encode(data)将其转换为JSON。

答案 1 :(得分:0)

克里斯·普拉特有最好的答案,但如果你坚持按照你的要求去做,你可以这样做:

var nameValueCollection = 
System.Web.HttpUtility.ParseQueryString(Request.InputStream);
var dictionary = nameValueCollection.AllKeys.ToDictionary(k => k, k => 
nameValueCollection[k]);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(dictionary);

确实要求您在请求字符串中没有重复的密钥。