2012-09-18 50 views
0

我有這個api控制器操作,需要一個對象「ContentList」作爲參數。發佈對象到MVC控制器使用HttpWebRequest,WebClient等

[HttpPost] 
    public List<string> SendList(string param, ContentList list) 
    { 
     List<string> testReturn = new List<string> { "test1", "test2", "test3", "test4" }; 

     return testReturn ; 

    } 

我迄今爲止嘗試是調用這樣一個控制器的動作:

 Uri _uri = new Uri("http://localhost:xxxxx/api/FakeTest/SendList?param=test"); 

     var serializer = new JavaScriptSerializer(); 
     string requestData = serializer.Serialize(new 
     { 
      list = ContentList, 
     }); 

     using (var client = new WebClient()) 
     { 
      client.Headers[HttpRequestHeader.ContentType] = "application/json"; 

      var result = client.UploadData(_uri, Encoding.UTF8.GetBytes(requestData)); 

      var tempString = Encoding.UTF8.GetString(result); 
     } 

在這個例子中,tempString = 「測試1」, 「測試2」, 「TEST3」,「TEST4 「]如由控制器動作重新啓動。

在控制器操作中,我可以訪問在ContentList中傳遞的屬性,並返回它們的值(相應地改變行爲的返回值)。

但是,在控制器操作中,我需要發送ContentList對象進行進一步處理,而這似乎失敗了。我得到一個500內部服務器錯誤,並且我不能在控制器中設置一個斷點來跟蹤傳入的值。調試器從未擊中它...

我期望這與將json發送給控制器行動。

無論如何,似乎ContentList被從控制器動作發送到的代碼拒絕,所以我想我需要做一些反序列化,對吧?

底線,問題是,從代碼調用控制器動作,傳入C#對象並使其可用於控制器操作的正確方法是什麼?

回答

0

如果您使用的是MVC 3,那麼您的控制器應該能夠以直接的方式重現和解析json數據。如果您正在使用MVC 2,您需要在您的應用程序註冊一個新的工廠,以照顧JSON解析的控制器上

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); 
} 

關於這個問題的更多資訊: http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

+0

它實際上是一個MVC 4 api控制器。 – Soeren

+0

檢查這個問題,有解釋如何將json信息傳遞給控制器​​:http://stackoverflow.com/questions/560575/asp-net-mvc-how-to-pass-json-object-from-view-to-控制器作爲參數 – Bardo

相關問題