如何进行web API Post方法调用

时间:2016-02-05 17:24:13

标签: asp.net-mvc asp.net-web-api

我有两个项目的解决方案,一个是我的webapi服务,另一个是我的项目mvc。我从我的控制器调用该服务。我的服务有GET,POST,PUT所有方法。在我看来,我正在使用一个提交按钮,它会调用后控制器方法,后者又调用我的服务。这里我面临的问题是它总是调用GET方法。我想在我的服务中激活POST方法

控制器发布方法

            [HttpPost]
            public ActionResult Create(Test test)
            {
                if (ModelState.IsValid)
                {

                    Test objTest  = MyService.Create(test);

                    if (objTest  == null)
                    {
                        return HttpNotFound();
                    }


                    return RedirectToAction("Index");
                }

            }

这里调用服务

    **public Test Create(Test test)
    {
        string uri = baseUri + "Test/";
        using (HttpClient httpClient = new HttpClient())
        {
            Task<HttpResponseMessage> response = httpClient.PostAsJsonAsync(uri, new StringContent(JsonConvert.SerializeObject(Test)));

           return JsonConvert.DeserializeObjectAsync<Test>(response.Result.Content.ReadAsStringAsync().Result).Result;
         }
    }**

这是帖子

    **// POST api/Test
    public HttpResponseMessage PostTest(test test
            {
                if (ModelState.IsValid)
                {
                    db.Test.Add(test);
                    db.SaveChanges();

                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, test);
                    response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = test.TestID }));
                    return response;
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.BadRequest);
                }
            }


****************
**// GET api/Test
        public IEnumerable<Test> GetTest()
        {
            var tests= db.Tests;

            return tests.AsEnumerable();
        }**

它总是调用上面的Get方法。我是web api服务的新手。有人可以用正确的方式指导我,我错了。我没有使用任何ajax来调用post方法。

2 个答案:

答案 0 :(得分:3)

好吧,看看你正在使用的方法:

httpClient.GetStringAsync(uri);

Get完全符合名称的含义。它向资源发出GET请求。如果要使用其他HTTP谓词,请使用other methods available

之一

例如:

httpClient.PostAsync(uri, someContentObject);

或者,使用HttpClientExtensions

httpClient.PostAsJsonAsync(uri, test);

答案 1 :(得分:-1)

这是你用一些数据进行POST的方式。它类似于GET请求,但在这种情况下,因为你想发送一个POST,这将是适用的。还要注意添加POST数据的简单方法(与HttpWebRequest相比)

httpClient.PostAsync(uri, new StringContent(data));