在Get / Post Requests中发送序列化数据

时间:2018-05-11 06:41:20

标签: c# asp.net web-services asp.net-web-api httpwebrequest

您好我的网络服务中有一个方法如下

[HttpGet]
public HttpResponseMessage RegenerateReport(/*string reportObject*/)
    {
       var result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StringContent("Operation completed.");
        return result;
    }

它工作正常但我实际上希望能够将序列化的JSON对象发送到此函数。

另外,我尝试在此函数上使用[HttpPost]标记并从我的代码调用如下

var data = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(obj));

        string _BaseUrl = ConfigurationManager.AppSettings["WebAPIBaseURL"];

        HttpWebRequest request = WebRequest.Create(string.Format("{0}{1}",
                                        _BaseUrl,
                                        "test/RegenerateReport?FileName=" + RCFileName)) as HttpWebRequest;

        // Set type to POST
        request.Method = "Post";
        request.ContentType = "application/xml";
        request.ContentLength = data.Length;

        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }


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

         var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

返回

  

请求的资源不支持http方法'GET'。

更新 现在删除了此错误,因为我已将标签[HttpGet]和[HttpPost]添加到我的Web方法中。现在的问题是如何将序列化对象传递给Web服务方法。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想在网络服务中提交一些数据,您应该始终使用[HttpPost]。

我认为你的消费者是错的,没有做POST请求。我通常使用Microsoft.AspNet.WebApi.Client包,示例代码可能如下所示:

.cer

只需替换您需要的参数(网址,类型,正文)