【问题标题】:Calling Put method in Web API with asp.net MVC as client使用 asp.net MVC 作为客户端在 Web API 中调用 Put 方法
【发布时间】:2014-04-07 11:20:03
【问题描述】:

我已经使用以下 put 方法创建了一个 Web-api

public HttpResponseMessage Put(int id, [FromBody]DataModel 模型)

在 put 方法中,我传递了对象,它在数据库中得到更新。它的工作我已经用提琴手检查过。

现在在我的 MVC 应用程序中,我使用以下代码调用它

[HttpPost]
    public JsonResult OrderSearch(DataModel model)
    {
        UpdateOrder(model).Wait();
        if (putresult != null && putresult != string.Empty)
        {
            return Json(putresult);
        }
        else
        {
            return Json("Error in getting result");
        }
    }

    private async Task UpdateOrder(DataModel model)
    {
       string json = JsonConvert.SerializeObject(model);
       using (var client = new HttpClient())
       {
           client.BaseAddress = new Uri(url);
           client.DefaultRequestHeaders.Accept.Clear();
           client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


           HttpResponseMessage response = client.PutAsync("api/values/"+ model.OrderNo,new StringContent(json)).Result;

           if (response.IsSuccessStatusCode)
           {
               putresult = await response.Content.ReadAsAsync<string>();

           }
       }

    }

但是代码没有命中我在服务上的 Put 方法,putresult 保持空白。我尝试搜索有关 PutAsync 的用法,但找不到任何东西,所以请帮忙。

【问题讨论】:

  • 您正在使用 put to a post 方法?
  • 当用户编辑他想要的信息时,OrderSearch 是一个部分视图,他点击提交按钮并发布数据,现在由于数据不是新的,它已经可用,所以我正在使用 put 更新上一个。

标签: asp.net asp.net-mvc-4 visual-studio-2012 asp.net-web-api dotnet-httpclient


【解决方案1】:

在任何 ASP.NET 运行时应用程序中使用 .Wait 都可能导致死锁。我不确定你应该如何处理 MVC 中的异步方法。

【讨论】:

  • 是的,如果有人粗心处理。但在我的情况下,上面的客户端正在调用 api,我的 get 和 get(int) 被调用并返回正确的值,但是 put(问题中给出的签名)没有被调用。
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多