将ASP.NET Core Web API连接到ASP.NET-MVC5项目

时间:2019-02-18 11:42:49

标签: sql-server asp.net-mvc asp.net-core-webapi

我正在尝试将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请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常的来源和位置的信息。

1 个答案:

答案 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方法传递的类相同。现在有两个类,每个类都在不同的命名空间中。