使用HttpwebRequest调用MVC HttpPost方法(带参数)

时间:2013-03-13 15:38:18

标签: c# asp.net-mvc httpwebrequest

我有以下MVC方法。

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

用它来调用Listen方法,但是status参数总是空白。而我想要json字符串{status:“success”,payload:“some information”}作为参数。

我做错了什么?

P.S。:我在发送实际内容的同时也尝试了以下声明。

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

此致 中号

3 个答案:

答案 0 :(得分:0)

如果您需要从MVC试用WebApi提供任何类型的服务。您可以使用HTTP REST轻松完成此任务。

在此处阅读更多ASP.NET WebApi

答案 1 :(得分:0)

您似乎在说这个请求是json,但是使用wwwencoding发送它。

删除status={0}行位&amp;只是按原样发送json。

答案 2 :(得分:0)

您可以尝试这样的事情

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