以asp.net MVC为客户端调用Web API中的Put方法

以asp.net MVC为客户端调用Web API中的Put方法,asp.net,asp.net-mvc-4,visual-studio-2012,asp.net-web-api,dotnet-httpclient,Asp.net,Asp.net Mvc 4,Visual Studio 2012,Asp.net Web Api,Dotnet Httpclient,我已经用下面的put方法创建了一个webapi 公共HttpResponseMessage Put(int-id,[FromBody]数据模型) 在put方法中,我传递对象,它在数据库中得到更新。我已经和小提琴手核对过了 现在在我的MVC应用程序中,我使用以下代码调用它 [HttpPost] public JsonResult OrderSearch(DataModel model) { UpdateOrder(model).Wait(); if

我已经用下面的put方法创建了一个webapi

公共HttpResponseMessage Put(int-id,[FromBody]数据模型)

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

           }
       }

    }
[HttpPost]
公共JsonResult OrderSearch(数据模型)
{
UpdateOrder(model.Wait();
if(putresult!=null&&putresult!=string.Empty)
{
返回Json(putresult);
}
其他的
{
返回Json(“获取结果时出错”);
}
}
专用异步任务更新顺序(数据模型)
{
字符串json=JsonConvert.SerializeObject(模型);
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=client.PutAsync(“api/values/”+model.OrderNo,new-StringContent(json)).Result;
if(响应。IsSuccessStatusCode)
{
putresult=wait response.Content.ReadAsAsync();
}
}
}

但是代码没有命中我在服务上的Put方法,putresult仍然为空。我试图搜索PutAsync的用法,但找不到任何内容,请帮助。

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

您正在执行一个“发布”方法?OrderSearch是一个局部视图,当用户编辑他想要的信息时,他单击“提交”按钮并发布数据,现在,由于数据不是新的,它已经可用,所以我使用put来更新以前的数据。如果有人粗心处理,则是的。但是在我的例子中,上面的客户机正在调用api my get和get(int)正在被调用并返回正确的值,但是put(问题中给出的签名)没有被调用。