2017-06-21 126 views
1

这是我的MVC控制器代码。想要将对象从MVC控制器传递到Web API控制器

[HttpPost] 
public async Task<IActionResult> InsertNewStudentAsync(ViewModel.StudentPersonalDetailsViewModel ob) 
{ 
    StudentModel obj = ViewModel.StudentPersonalDetailsViewModel.Translate(ob); 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:52494/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     var bodyData = ViewModel.StudentPersonalDetailsViewModel.Translate(ob); 

     //HttpContent ob = new HttpContent(); 
     var response = await client.PostAsync("api/Student/InsertStudent",obj); 
    } 
    return View(); 
} 

在线路var response = await client.PostAsync("api/Student/InsertStudent",obj);

它表示我示出在物镜的错误

错误CS1503参数2:不能从 'SMS.Domain.Models.StudentModel' 转换为' System.Net.Http.HttpContent'

如何将该对象传递给我的API控制器。

回答

2

这是因为它期望HttpContent派生类。

要么使用PostAsJsonAsync扩展方法

var response = await client.PostAsJsonAsync("api/Student/InsertStudent",obj); 

或自己

var json = JsonConvert.SerializeObject(obj); 
var content = new StringContent(json, Encoding.UTF8, "application/json"); 
var response = await client.PostAsync("api/Student/InsertStudent", content); 

将其转换基本上是什么扩展方法是引擎盖下做的。

以下是如果您不想添加其他依赖项的情况下自行扩展方法的示例。

public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUri, T obj) { 
    var json = JsonConvert.SerializeObject(obj); 
    var content = new StringContent(json, Encoding.UTF8, "application/json"); 
    return client.PostAsync(requestUri, content);  
} 
相关问题