2013-03-13 88 views
0

我有以下MVC方法。使用HttpwebRequest調用MVC HttpPost方法(使用參數)

[System.Web.Mvc.HttpPost] 
    public ActionResult Listen(string status) 
    { 

     CFStatusMessage statusMessage = new CFStatusMessage(); 
     if (!string.IsNullOrEmpty(status)) 
     { 
      statusMessage = Newtonsoft.Json.JsonConvert.DeserializeObject<CFStatusMessage>(status); 
     } 
     return Content(Server.HtmlEncode(status));// View(statusMessage); 
    } 

我想從其他應用程序調用上述方法..(控制檯)。我正在使用HttpWebRequest來調用MVC方法。使用下面的代碼,它能夠調用方法,但參數總是以空字符串的形式出現。

 string content = "{\"status\":\"success\",\"payload\":\"some information\"}"; 
     string url = "http://myrl.com"; 
     var httpWRequest = (HttpWebRequest) WebRequest.Create(url); 
     httpWRequest.Method = "POST"; 
     httpWRequest.ContentType = "text/json"; 
     var encoding = new ASCIIEncoding(); 
     byte[] data = encoding.GetBytes(string.Format("status={0}", Uri.EscapeDataString(content))); 
     httpWRequest.ContentLength = data.Length; 

     Stream stream = httpWRequest.GetRequestStream(); 
     stream.Write(data, 0, data.Length); 

     var response = (HttpWebResponse)httpWRequest.GetResponse(); 

有了這個它撥打電話傾聽的方法,但狀態參數總是來的空白。而我想要json字符串{status:「success」,payload:「some information」}作爲參數。

我在做什麼錯?

P.S .:我也嘗試了下面的說法,同時發送實際內容。

byte[] data = encoding.GetBytes(content); 

問候, 中號

+0

HABE? – Jan 2013-03-13 15:46:30

回答

0

如果你需要提供什麼樣的服務從MVC試用的WebAPI代替。您可以使用HTTP REST輕鬆完成此操作。

更多在這裏閱讀ASP.NET WebApi

+0

嗨Fals,我還有一個問題。現在,我正在使用MVC 4.0的ApiController。如果方法簽名是「public HttpResponseMessage Post([FromBody] CustomMessage msg)」,並且我發送Json字符串,如上所述它工作。但如果我想要得到字符串,即「公共HttpResponseMessage帖子([FromBody]字符串味精)」,味精參數是空白....任何方式來解決它? – user1961100 2013-03-15 12:13:05

0

你似乎是說的請求是JSON,但使用wwwencoding發送。

刪除status={0}行位&只是發送json原樣。

0

你可以嘗試像你拉琴,你的要求看起來像選中此

using (var sw = new StreamWriter(httpWRequest.GetRequestStream())) 
{ 
    sw.Write(content); 
    sw.Flush(); 
    sw.Close(); 
}