【问题标题】:How to disallow a post method from Get method in Web API?如何从 Web API 中的 Get 方法中禁止发布方法?
【发布时间】:2019-12-24 11:28:56
【问题描述】:

我只是在学习 WebAPI 并且好奇我们是否可以在 get 方法中重用 Post 方法,或者它只是违反了编码标准。我们如何测试这种违规行为是否已经由某人完成?

 // GET api/values/5
    public string Get(int id)
    {
        var value= vc.Values.Where(v => v.Id == id).Select(v => v.Value1).SingleOrDefault(); 
        if (value==null) Post("New Value",id);
        return vc.Values.Where(v => v.Id == id).Select(v => v.Value1).SingleOrDefault();
    }

    // POST api/values
    public void Post([FromBody]string value, int id = 0)
    {
        vc.Values.Add(new Value { Id=id,Value1 = value });
        vc.SaveChanges();
    }

【问题讨论】:

  • 不,你不应该。 Get 应该检索数据,如果丢失则不要创建它。
  • 好的,谢谢。我们如何为此类错误编写测试用例或可以扫描代码/项目以查找此类错误的东西。
  • 是的,您可以像调用方法一样调用您的 Web 服务,它可以工作,但这违反了一些规则,例如 SOLID。
  • @FurkanÖztürk 你知道任何可以帮助检测它的代码质量工具吗?
  • 你可以看看 SonarQube @DeepakMishra

标签: c# asp.net-web-api asp.net-web-api2


【解决方案1】:

这是 2 个问题,而不是一个。

像这样重用代码是灾难的根源。 例如,您可以通过将代码移动到库中来保持端点非常苗条。然后您可以简单地从端点调用这些新方法,这将负责代码重用部分。

就您如何检测此类问题而言,好吧,我不希望有一个工具可以为您做到这一点。你需要一个成熟的 SDLC,你需要对你已经拥有的东西进行代码审查和分析。

【讨论】:

  • +1,知识渊博,但可以避免诸如“灾难食谱”之类的事情,因为这不是生产就绪的代码,其目的只是让系统在出现问题时意识到出现问题.我一直在寻找可以在 WebAPI 中检测和验证这些东西的东西,这可能是一个单元测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2019-01-01
相关资源
最近更新 更多