【问题标题】:How to expose 3 endpoints in C# Webservices?如何在 C# Webservices 中公开 3 个端点?
【发布时间】:2020-10-13 12:49:57
【问题描述】:

我想公开 3 个端点(“添加到硬币”、“获取硬币总量”、“重置硬币”),但我正在努力是否应该在控制器端完成此实现,因为我有一个接口,需要一些帮助,这是我目前的逻辑。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CoinJarAPI.Interface
{
    interface ICoinJar
    {
        void AddCoin(ICoin coin);
        decimal GetTotalAmount();
        void Reset();
    }

    public interface ICoin
    {
        decimal Amount { get; set; }
        decimal Volume { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using CoinJarAPI.Models;

namespace CoinJarAPI.Controllers
{
    public class CoinJarController : ApiController
    {
        // GET: api/CoinJar
        public IEnumerable<CoinJarModel> Get()
        {
            var coinJarList = new List<CoinJarModel>();
            for (int i = 0; i < 10; i++)
            {
                var coinjarModel = new CoinJarModel
                {
                    // volume, Amount, GetTotalAmount.
                };
            }
            return coinJarList;
        }

        // GET: api/CoinJar/5
        public string Get(int id)
        {
            return "value";
        }

    }
}

【问题讨论】:

  • 你应该在你的API Controller中公开这3个方法,每个方法都可以查询相关实现的类方法(实现你的接口)。

标签: c# asp.net-mvc api swagger


【解决方案1】:

取决于您要遵循的内容。如果您的实现是纯 100% 休息,那么:

CoinJarController端点

您应该定义以下内容:

  1. 获取与// GET: api/CoinJar一致的
  2. 获取与// GET: api/CoinJar/5一致的id
  3. Post,与// POST: api/CoinJar/ 重合,用于插入新的CoinJar 项目
  4. Put,与// PUT: api/CoinJar/重合,用于更新CoinJar项目
  5. 删除,与// DELETE: api/CoinJar/重合,用于删除CoinJar项目

现在,取决于硬币是否应被视为其自身的资源,那么您可以声明以下内容

  1. GetCoin 将是// GET: api/CoinJar/{id}/Coin/
  2. GetCoin 这将是// GET: api/CoinJar/{id}/Coin/{CoinId}
  3. PostCoin 将是 // POST: api/CoinJar/{id}/Coin/{CoinId},它将在 CoinJar 中插入新硬币 等等

您还可以使用CoinJarPUT 版本一次性更新(添加硬币/重置等)硬币。这完全取决于您的需求。

仅用于接口的控制器

您的所有逻辑和接口都应该用于另一层,即业务层。通过这种方式,您可以实现您的接口并从您的控制器或任何其他类型的客户端相应地使用它们。

查看这些excellent api guidelines from Microsoft 了解更多设计信息。

【讨论】:

  • 谢谢,换句话说,我必须在控制器中拥有这些,而不需要有接口。?
  • 我提出的原因,我想要的是接受最新的硬币和体积 0f 42 液量盎司。计数器跟踪收集的总金额,将 bac 重置为 $0.00
  • 你的控制器不需要实现接口。我会使用实现接口的CoinJarRepository 并使用它来维持我的持久性。
  • 别忘了点赞/接受有用的答案!干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多