ASP.NET Web API合同版本控制
发布时间:2020-12-16 07:42:05 所属栏目:asp.Net 来源:网络整理
导读:我们希望在accept头中使用内容协商来实现基于版本的API. 我们能够实现控制器和具有一些继承和扩展默认HTTP选择器的API方法. 使用以下示例代码实现控制器继承, public abstract class AbstractBaseController : ApiController{ // common methods for all api
我们希望在accept头中使用内容协商来实现基于版本的API.
我们能够实现控制器和具有一些继承和扩展默认HTTP选择器的API方法. 使用以下示例代码实现控制器继承, public abstract class AbstractBaseController : ApiController { // common methods for all api } public abstract class AbstractStudentController : AbstractBaseController { // common methods for Student related API'sample public abstract Post(Student student); public abstract Patch(Student student); } public class StudentV1Controller : AbstractStudentController { public override Post([FromBody]Student student) // student should be instance of StudentV1 from JSON { // To Do: Insert V1 Student } public override Patch([FromBody]Student student) // student should be instance of StudentV1 from JSON { // To Do: Patch V1 Student } } public class StudentV2Controller : AbstractStudentController { // public override Post([FromBody]Student student) // student should be instance of StudentV2 from JSON { // To Do: Insert V2 Student } } public abstract class Student { public string FirstName { get; set; } public string LastName { get; set; } } public class StudentV1 : Student { } public class StudentV2 : Student { public string Email { get; set; } } 我们已经创建了上面的体系结构,以便在版本更改的情况下执行更少的代码,比如说版本1有10个API方法,并且一个API方法的更改比版本2代码中可用的更改而不修改其他9个(它们是从版本继承的) 1). 现在,我们面临的主要问题是合同版本控制,因为我们无法实例化抽象学生的实例.当有人将JSON发布到API版本1时,应该在方法中传递StudentV1的实例,并在版本2中传递相同的实例. 有没有办法实现这个目标? 提前致谢!! 解决方法
根据您粘贴的代码,您可以使AbstractStudentController成为通用的.
因为您声明为abstract的API必须在每个API版本中实现,并且您可以使用泛型定义类型.我希望我没有遗漏你的描述中的某些内容,因为在StudentV2Controller中你的实现中缺少Patch,但是它被声明为abstract.你想从StudentV1Controller派生StudentV2Controller吗? public abstract class AbstractBaseController : ApiController { // common methods for all api } public abstract class AbstractStudentController<StudentType> : AbstractBaseController { // common methods for Student related API'sample public abstract Post(StudentType student); public abstract Patch(StudentType student); } public class StudentV1Controller : AbstractStudentController<StudentV1> { public override Post([FromBody]StudentV1 student) // student should be instance of StudentV1 from JSON { // To Do: Insert V1 Student } public override Patch([FromBody]StudentV1 student) // student should be instance of StudentV1 from JSON { // To Do: Patch V1 Student } } public class StudentV2Controller : AbstractStudentController<StudentV2> { // public override Post([FromBody]StudentV2 student) // student should be instance of StudentV2 from JSON { // To Do: Insert V2 Student } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET – 从静态方法/静态类访问会话?
- 使用Asp.Net Identity 2在AspNetUserClaims中存储用户信息有
- 绘制图表到ASP.NET MVC 4(Razor,C#)网站
- asp.net – IE6 vs IE8,按钮vs超链接,CSS渲染问题
- asp.net – 如何获取“发布网站”命令为我的Visual Studio
- asp.net-mvc – 将Angular与MVC 5捆绑在一起后出现格式错误
- ‘ASP._Page_sitecore_shell_client_Speak_Layouts_Layouts
- 如何在asp.net中真正注销
- 检测asp.net将用户重定向到登录页面
- asp.net-mvc – 我可以使用Visual Studio的快速版本制作ASP
推荐文章
站长推荐
- asp.net-mvc – MVC3 Html.HiddenFor(Model => M
- ASP.NET Web API – 实体框架 – .Include上的50
- ASP.NET Core中间件实现分布式 Session
- asp.net – 在ascx文件中使用if条件
- asp.net-mvc – 如何持久保存用户选择(例如:主题
- asp.net-mvc – 我只是不了解TDD单元测试(Asp.Ne
- asp.net-mvc – 我可以在Ajax.ActionLink中使用O
- asp.net – SSRS ReportViewer Web Control – 渲
- I can 前端-07 ASP.NET 常用对象
- asp.net – 间歇性SQL连接错误
热点阅读