1

在我们现有的 .net 核心 Web api (REST) 端点之一中,其响应负载中的属性值之一是电子邮件地址,该地址将很快更改为字母数字 ID。响应负载的这种变化将破坏现有的集成。

这种重大变化的影响可以通过向 api 引入版本来解决,说只有 v2 版本将在其响应负载中使用字母数字 id,否则 v1 版本将继续在其响应负载中呈现电子邮件地址,但是否有任何其他替代解决方案可以避免破坏现有集成,即使在引入现有响应负载结构的变化

现有的响应负载结构:

{
  customerid: name@testdomain.com
}

未来响应有效载荷结构:

{
  customerid: 1123acbd56
}
4

1 回答 1

1

您可以通过创建一个AcceptHeaderAttribute和传递来实现这一点Accept:[attrbute value]

就像,在下面的代码中,我创建了一个AcceptHeaderAttribute

[AttributeUsage(AttributeTargets.Method)]
    public class AcceptHeaderAttribute : Attribute, IActionConstraint
    {
        private readonly string _acceptHeader;
        public AcceptHeaderAttribute(string acceptHeader)
        {
            _acceptHeader = acceptHeader;
        }
        public int Order { get; set; }

        public bool Accept(ActionConstraintContext context)
        {
            return context.RouteContext.HttpContext.Request.Headers["Accept"].Any(x => x.IndexOf(_acceptHeader) >= 0);
        }
    }

这是用途,

[HttpGet]
        public User GetUserName()
        {
            return new User { Name = "Abcd" };
        }

        [HttpGet]
        [AcceptHeader("app/vnd.user")]
        public User GetUserEmail()
        {
            return new User { Name = "XYZ@ABCD.com" };
        }

这是提琴手的回应

在此处输入图像描述

于 2020-09-10T17:13:17.430 回答