如何解决如何在不破坏现有集成的情况下在Web API响应有效负载结构中引入更改
在我们现有的.net核心Web API(REST)端点之一中,其响应有效负载中的属性值之一是电子邮件地址,该地址不久将更改为字母数字ID。响应有效负载的这一变化将破坏现有的集成。
可以通过将版本引入api来解决此突破性更改影响,说版本2的响应有效载荷中只有v2版本会包含字母数字id,否则v1版本将在其响应有效载荷中保留呈现电子邮件地址,但是是否有其他替代解决方案可以避免破坏现有版本甚至在引入现有响应有效负载结构的更改之后也可以进行集成
现有响应有效负载结构:
{
customerid: name@testdomain.com
}
未来响应有效负载结构:
{
customerid: 1123acbd56
}
解决方法
您可以通过创建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" };
}
这是提琴手的回应
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。