简体   繁体   English

想要将对象从MVC控制器传递到Web API控制器

[英]Want to pass an object from MVC controller to web api controller

This is my MVC Controllers code. 这是我的MVC控制器代码。

[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();
}

In the line var response = await client.PostAsync("api/Student/InsertStudent",obj); 在此行var response = await client.PostAsync("api/Student/InsertStudent",obj);

It is showing me an error on obj showing that 它显示给我关于obj的错误,表明

Error CS1503 Argument 2: cannot convert from 'SMS.Domain.Models.StudentModel' to 'System.Net.Http.HttpContent' 错误CS1503参数2:无法从“ SMS.Domain.Models.StudentModel”转换为“ System.Net.Http.HttpContent”

How do I pass that object to my API's controller. 如何将该对象传递给我的API控制器。

That is because it is expecting a HttpContent derived class. 那是因为它期望一个HttpContent派生类。

Either use the PostAsJsonAsync extension method 要么使用PostAsJsonAsync扩展方法

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

or convert it yourself 或自己转换

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

Which is basically what the extension method is doing under the hood. 基本上,扩展方法是在后台进行的。

Here is an example of rolling your own extension method if you do not want to add additional dependencies. 如果您不想添加其他依赖项,这是滚动自己的扩展方法的示例。

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);    
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM