【问题标题】:Why the webapi's post method is receiving the parameter of type interface as null when called from a postman?为什么 webapi 的 post 方法在从邮递员调用时接收类型接口为 null 的参数?
【发布时间】:2021-06-05 20:36:27
【问题描述】:

制作了这个 webapi。

[HttpPost]
    public void Post([FromBody] Models.IHero hero)
    {
        Models.Heroes heroes = new Models.Heroes();

        heroes.AddHeroes(hero);
    }

从邮递员那里调用它。

https://localhost:44320/api/values?Id=1&Name=Shankar

但在方法中收到的hero 返回null

界面:

 public interface IHero
    {
        int Id { get; set; }
        string Name { get; set; }
    }

更新:

将 IHero 转换为 Hero 类

   public class Hero
    {
        int Id { get; set; }
        string Name { get; set; }
    }

并在Post 方法中使用。

 public void Post([FromBody] Models.Hero hero)
        {
            Models.Heroes heroes = new Models.Heroes();

            heroes.AddHeroes(hero);
        }

【问题讨论】:

    标签: c# rest webapi asp.net-apicontroller


    【解决方案1】:

    您有[FromBody] 属性,这意味着您需要在请求的正文中传递数据,而不是在查询参数中

    【讨论】:

    • 现在也做了同样的事情,但仍然是 NULL。
    • 是的,也遵循 Serge 的回答,使用简单的类而不是接口作为输入参数。您能否向我们展示 Models.IHero 的外观?
    • 嗨,我已经在我的问题中粘贴了它。公共接口 IHero { int Id { 获取;放; } 字符串名称 { 获取;放; } }
    • 好的,然后把它转换成一个类再试一次
    • 我做了,检查我更新的问题,但现在 Id 即将变为 0 并且 Name = null。
    【解决方案2】:

    你不能使用接口,因为控制器应该创建一个输入参数的实例。它不能从接口创建实例。所以修正你的行为

     public void Post([FromBody] Models.Hero hero)
        {
           var heroes = new Models.Heroes();
    
            heroes.AddHeroes(hero);
        }
    

    【讨论】:

    • 抱歉,没听懂,Models.Hero?
    猜你喜欢
    • 2019-01-16
    • 2011-09-08
    • 1970-01-01
    • 2021-08-19
    • 2015-10-26
    • 2020-03-17
    • 1970-01-01
    • 2017-06-12
    • 2023-03-26
    相关资源
    最近更新 更多