如何向我未存储在数据库中的Web API响应中添加属性?
我正在使用Entity Framework 6.0构建C#Web API。 我有最简单的用户类,有3个属性,我坚持将SQL存入用户表,其中有3个相应的列,其中UserID是其主键。
public partial class User { public string UserID {get; set;} public string FirstName {get; set;} public string LastName {get; set;} }
我想在Web API中添加两个仅用于输出的属性,我不想在我的数据库中存储这些属性。 我使用这些属性与消费客户端“状态”和“消息”信息进行通信,这些信息不属于用户类。 状态=确定|错误|警告。 消息将是Web API需要与调用客户端通信的任何消息。
我的问题是:在发送回Web API的响应而不修改SQL上的基础用户表时,动态添加这两个属性的最简单方法是什么? 我知道我可以将这两个作为虚拟列添加到用户表中。 当我不需要它时,我不想在SQL端带来那些开销。
我会采用更通用的方法:
public class MyResponse { public T Data {get;set;} public Status ResponseStatus{get;set;} public string Message{get;set;} }
这样您就可以以相同的方式处理所有模型/数据。
UPDATE
[AllowAnonymous] [RoutePrefix("api/home")] public class HomeController : ApiController { [HttpGet] [Route("ok")] public MyResponse OK() { MyUser m = new MyUser(); var r = MyResponse .Success(m); return r; } [Route("nok")] [HttpGet] public MyResponse NOK() { var r = MyResponse .Error("something went terribly wrong"); return r; } } public class MyResponse { public T Data { get; set; } public Status ResponseStatus { get; set; } public string Message { get; set; } private MyResponse() { } public static MyResponse Success(T data) { return new MyResponse { Data = data, ResponseStatus = Status.Success }; } public static MyResponse Error(string message) { return new MyResponse { ResponseStatus = Status.Error, Message = message }; } } public class MyUser { public int Id { get; set; } public string Name { get; set; } } public enum Status { Unknown = 0, Success = 1, Error }
理想情况下,您应该在模型中使用所需的所有属性创建数据传输对象(DTO)类,然后使用映射器将用户映射到DTO
public class UserDto{ public string UserID {get; set;} public string FirstName {get; set;} public string LastName {get; set;} public string Message {get; set;} public string Status {get; set;} }
然后在你的行动中
[ResponseType(typeof(UserDto))] public IHttpActionResult User(string userId){ // retrive user from db var userDto = Mapper.Map(dbUser); if(condition){ userDto.Message = "the message"; userDto.Status = "the status"; } return Ok(userDto); }
然后,您可以从nuget安装Automapper并将其配置为为您执行映射。
- 如何在ASP.NET 5 / MVC 6中创建响应消息并向其添加内容字符串
- 如何使用ASP.Net Web Api 2进行部分响应
- 为ASP.Net Web API生成JSON模式
- Autofac – 无法创建请求生命周期范围,因为HttpContext不可用 – 由于异步代码?
- Owin SelfHost WebApi – 客户端在响应期间关闭连接会引发exception吗?
- Web API Action返回类型最佳实践
- Web Api Request.CreateResponse HttpResponseMessage no intellisense VS2012
- OWIN Cookie身份validation
- 路由和消息处理程序:请求处理订单问题