c# - 想要将对象从 MVC Controller 传递到 Web api Controller

标签 c# asp.net-core-mvc asp.net-core-webapi

这是我的 MVC Controller 代码。

[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 = wait client.PostAsync("api/Student/InsertStudent",obj);

它向我显示了 obj 上的一个错误,表明

Error CS1503 Argument 2: cannot convert from 'SMS.Domain.Models.StudentModel' to 'System.Net.Http.HttpContent'

如何将该对象传递给我的 API Controller 。

最佳答案

这是因为它需要 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);    
}

关于c# - 想要将对象从 MVC Controller 传递到 Web api Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44678060/

相关文章:

asp.net-mvc - MVC Core使用ajax发布数据并刷新页面上的某个部分

c# - 基于 .Net Core 中的 appSettings 使用 Cors

c# - 无法在 Mac OSX 上启动 picoe/eto 应用程序

c# - 当我使用 void 时,内存看到的是什么数据类型?

c# - 如何将依赖项注入(inject) asp.net core 中的模型?

asp.net-core - 如何使用 .NET Core 在 Web API 中使用 FluentValidation 执行异步 ModelState 验证

c# - 如何使用访问 token 获得访问 REST API 的授权

c# - 正确使用 app.config

c# - 干净的调用模式?

c# - httpClient.PutAsync() 未更新,415 不支持的媒体类型