我正在尝试将asp.net核心Web api(已经连接到本地sqlserver并且可以正常工作)连接到我的asp.net-mvc5 Web应用程序,因此在调用控制器时,它将使用API从数据库中获取数据< / p>
现在,这就是我尝试在asp.net mvc项目中连接api的方式,如下所示是homeController:
namespace AptitudeTest.Controllers
{
public class HomeController : Controller
{
string Baseurl = "http://localhost:51448";
public async Task<ActionResult> Index()
{
List<Teacher> teacher = new List<Teacher>();
//Teacher t1 = new Teacher();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(Baseurl);
client.DefaultRequestHeaders.Clear();
//Define request data format
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Sending request to find web api REST service resource GetAllEmployees using HttpClient
HttpResponseMessage Res = await client.GetAsync("api/Admin/Get");
//Checking the response is successful or not which is sent using HttpClient
if (Res.IsSuccessStatusCode)
{
//Storing the response details recieved from web api
var EmpResponse = Res.Content.ReadAsStringAsync().Result;
//Deserializing the response recieved from web api and storing into the Employee list
teacher = JsonConvert.DeserializeObject<List<Teacher>>(EmpResponse);
}
//returning the employee list to view
return View(teacher);
}
}
我希望它可以将教师返回为json对象,但这是错误消息:
传递到字典中的模型项的类型为“ System.Collections.Generic.List 1[AptitudeTest.Teacher]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [AptitudeTest.Models.Teacher]”。
描述:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.InvalidOperationException:传递到字典中的模型项的类型为“ System.Collections.Generic.List 1[AptitudeTest.Teacher]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [AptitudeTest.Models.Teacher]”。
源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常的来源和位置的信息。
答案 0 :(得分:1)
您遇到的错误是:
传递到字典中的模型项的类型为'System.Collections.Generic.List1 [AptitudeTest.Teacher]',但是此字典需要类型为'System的模型项。 Collections.Generic.IEnumerable1 [AptitudeTest.Models.Teacher]'。
,这意味着您的视图期望不同的模型对象作为输入,而传递的对象是不同的类型。看来您在视图中定义的模型为:
IEnumerable<Teacher>
返回List<Teacher>
时。将视图更改为List<Teacher>
,例如:
@model List<Teacher>
或从控制器操作中返回IEnumerable<Teacher>
对象。
为此,您可以编写以下内容:
IEnumerable<Teacher> teachers = teacher;
return View(teachers );
无论哪种方式,您都应该能够解决错误并继续前进。
没有注意到在不同的命名空间中有两个不同的类,一个是AptitudeTest.Teacher
,另一个是AptitudeTest.Models.Teacher
。我们定义视图的类应该与从action方法传递的类相同。现在有两个类,每个类都在不同的命名空间中。