【问题标题】:Connecting asp.net core web api to asp.net-mvc5 project将 asp.net core web api 连接到 asp.net-mvc5 项目
【发布时间】:2019-07-11 19:01:46
【问题描述】:

我正在尝试将 asp.net core web api(已经连接到我的本地 sqlserver 并且工作正常)连接到我的 asp.net-mvc5 web 应用程序,因此当调用控制器时,它使用 API 从数据库中获取数据

现在,这就是我尝试在我的 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.List1[AptitudeTest.Teacher]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[AptitudeTest.Models.Teacher]”。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.InvalidOperationException:传入字典的模型项的类型为“System.Collections.Generic.List1[AptitudeTest.Teacher]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[AptitudeTest.Models.Teacher]”。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

【问题讨论】:

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


    【解决方案1】:

    你得到的错误是:

    传入字典的模型项的类型是'System.Collections.Generic.List1[AptitudeTest.Teacher]',但是这个字典需要一个'System.类型的模型项。 Collections.Generic.IEnumerable1[AptitudeTest.Models.Teacher]'.

    这意味着您的视图需要不同的模型对象作为输入,而传递的对象是不同的类型。看起来您在视图中将模型定义为:

    IEnumerable<Teacher>
    

    当您返回 List&lt;Teacher&gt; 时。要么把它改成List&lt;Teacher&gt;,比如:

    @model List<Teacher>
    

    或从控制器操作返回一个IEnumerable&lt;Teacher&gt; 对象。

    为此,您可以编写以下内容:

    IEnumerable<Teacher> teachers = teacher;
    return View(teachers );
    

    无论哪种方式,您都应该能够解决错误并继续前进。

    编辑:

    没注意到在不同的命名空间中有两个不同的类,一个是AptitudeTest.Teacher,另一个是AptitudeTest.Models.Teacher。我们定义视图的类应该与从动作方法传递的相同。现在有两个类,每个类都在不同的命名空间中。

    【讨论】:

    • 我已经尝试了后一个但同样的错误,是否有一些库可以帮助像反应中的 axios 有助于将我的 api 连接到我的反应项目(我也在 reactjs 中处理相同的项目)
    • @ShabanaHussain 对不起,我很抱歉,看起来你还有另一个问题,即有两个不同的类,一个:AptitudeTest.Models.Teacher,第二个:AptitudeTest.Teacher,两者在视图和一个从行动传递过来的
    • 在视图中,您可以将模型设置为您从操作传递的前一个模型:@model List&lt;AptitudeTest.Teacher&gt; 或从操作方法传递List&lt;AptitudeTest.Models.Teacher&gt;
    • 是的,谢谢,问题都是关于模型的,现在我已经修复了它,我有另一个不同的错误:“无法从 system.int64 转换或转换为 system.collections.generic.list”指到代码行“teacher = JsonConvert.DeserializeObject>(EmpResponse);”现在想知道如何处理它
    • 在调试器中检查 json 响应并将其与您的模型进行比较,很可能从 json 到 c# 对象的转换失败
    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2017-08-15
    • 2020-06-19
    • 2020-06-22
    • 2023-02-22
    相关资源
    最近更新 更多