【问题标题】:c# HTTP Post IHttpActionResultc# HTTP Post IHttpActionResult
【发布时间】:2020-05-15 03:52:13
【问题描述】:

我有两个 httppost 方法,一个是一个具体的类,它工作正常。另一个是接收接口。当我使用邮递员时,我的接口方法为空。我应该能够将模型类发送到接口我需要使用自定义模型绑定器吗?如果需要,我需要在哪里添加它?

public IHttpActionResult InsertData([FromBody] DataLog _datalog)

public IHttpActionResult Insert([ModelBinder(typeof(IDataLog))] IDataLog _log)

【问题讨论】:

  • 关于接口和类差异的好信息。 Abstract vs defined
  • 你快到了。您需要创建一个自定义模型绑定器并将其与您的 ModelBinder 属性一起使用。所以[ModelBinder(typeof(DataLogModelBinder))]
  • 查看这篇文章以获得编写自定义模型绑定器的帮助:docs.microsoft.com/en-us/aspnet/web-api/overview/…
  • @KevinBabcock 会是模型中的一个类
  • @Jefferson 抱歉,我误读了您的评论。这将是一个与模型不同的类。定义它的位置取决于应用程序的组织和结构。

标签: c# asp.net


【解决方案1】:

我认为这也可以回答您的问题。

接口

不能将接口用作对象的原因是因为它们没有公共访问器。他们也不能有字段。它只是属性和方法的签名。

接口

  1. 无法实现
  2. 不能有公共修饰符
  3. 不能有虚拟

您定义的每个类都有具有 getter 和 setter 的公共属性。 Setter 是设置这些公共属性值的对象。您可以使用接口并将它们扩展为类,并将这些类用作对象来接收数据

Good read about defining and implementing interfaces

Custom Model Binding in ASP with examples

【讨论】:

  • 谢谢@jawad 那么 ModelBinder 是干什么用的?
  • ModelBinder 属性指定应该用于绑定 Class 的操作参数的 IModelBinder 的类型
  • 还有其他方法吗?
  • 不要复制粘贴有关如何创建活页夹的信息,而是将其用于类,然后在 API 调用中实现该类,this page defines how to create custom model binding
【解决方案2】:

我不知道我是否理解你的问题。无论如何,关于我必须说的代码:

  1. 不要使用“_”来命名变量、类、参数...它不符合 CLS。 https://docs.microsoft.com/en-us/dotnet/api/system.clscompliantattribute?view=netframework-4.8

  2. 也许您可以按照 SOLID 原则使用字母“D”。 D 作为依赖倒置,使用 IOC 进行依赖注入。 https://en.wikipedia.org/wiki/SOLIDhttps://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1

  3. 如果您的方法中只有一种返回类型,而不是使用通用 ActionResults 类型,您可以执行类似的操作,以了解逻辑:

代替:

public ActionResult Index()
{
    return View();
}

这样做:

public ViewResult Index()
{
    return View();
}

Difference Between ViewResult() and ActionResult()

  1. 执行异步等待 (TAP) 模式。 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

  2. 代替:

     public IHttpActionResult InsertData([FromBody] DataLog _datalog)
    

    像这样让代码编译得更快,添加 HttpPost 属性,即使知道这是一个 POST 动作:

    这样做:

    [HttpPost]
     public IHttpActionResult InsertData([FromBody] DataLog _datalog)
    

希望这些良好做法对您有所帮助! :)

【讨论】:

  • hmmm 关于点 [1] - 在使用依赖注入时,我总是看到 _。例如,private readonly IDataContext _dataContext;。它具体在哪里说不要使用那个符号?
  • @SeanT 关注这个:stackoverflow.com/a/862796/8207463 明白这一点
  • 没有说明使用前导下划线
  • 说的是无符号整数。它与下划线无关,哈哈
  • 使用下划线完全没问题,我可以理解避免使用关键字之类的东西。 docs.microsoft.com/en-us/dotnet/standard/design-guidelines/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2017-10-03
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
相关资源
最近更新 更多