2017-05-10 38 views
1

嗨有效的JSON我從Request.InputStream格式值在Asp.net MVC

searchbtn=&__RequestVerificationToken=Cj00sURmj5hhazrlcx72-ahnRwOFhZzMOO5hdMH8epMUFTkicNYlKy9Fs3nZdq_Whzr3I57zZqsncWybsNrQ47Sg4vGQB6GbqRPrL3D0o3Q1 
&ClientID=274&CompanyName=&PerformedDate=&X-Requested-With=XMLHt 
tpRequest 

波紋管串有什麼絕招來格式化這個字符串爲有效的JSON字符串?

+0

你怎麼把它傳回控制器?它是通過AJAX嗎? –

回答

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); 

短,你只需要手動解析它並創建一個對象出來。例如:Json.Encode(data)

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

您可以然後通過把它變成JSON。

+0

我曾嘗試第二個選項,但得到**本地或參數名爲「d」不能聲明** 字符串QS =「searchbtn = __ RequestVerificationToken = Cj00sURmj5hhazrlcx72-ahnRwOFhZzMOO5hdMH8epMUFTkicNYlKy9Fs3nZdq_Whzr3I57zZqsncWybsNrQ47Sg4vGQB6GbqRPrL3D0o3Q1」的錯誤; qs + =「&ClientID = 274&CompanyName =&PerformedDate =&X - 請求 - With = XMLHttpRequest」; var data = qs.Split(new [] {'&'},StringSplitOptions.None).Select(s => qs.Split(new [] {'='}))。ToDictionary(d => d [0],d => d [1]); –

+0

問題是'select(s => qs',應該是'Select(s => s'。 –

+0

使用相同的問題 var data = qs .Split(new [] {'&'},StringSplitOptions (d => d [0],d => d [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); 

它要求的是你沒有在請求字符串重複鍵。