如何向未存储在数据库中的 Web API 响应添加属性?

2023-12-02

我正在使用 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 端时,我不想在 SQL 端承担这些开销。


我会采用更通用的方法:

public class MyResponse<T>
{
    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<MyUser> OK()
    {
        MyUser m = new MyUser();
        var r = MyResponse<MyUser>.Success(m);
        return r;
    }

    [Route("nok")]
    [HttpGet]
    public MyResponse<MyUser> NOK()
    {
        var r = MyResponse<MyUser>.Error("something went terribly wrong");
        return r;
    }
}

public class MyResponse<T>
{
    public T Data { get; set; }
    public Status ResponseStatus { get; set; }
    public string Message { get; set; }

    private MyResponse() { }

    public static MyResponse<T> Success(T data)
    {
        return new MyResponse<T> { Data = data, ResponseStatus = Status.Success };
    }

    public static MyResponse<T> Error(string message)
    {
        return new MyResponse<T> { 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向未存储在数据库中的 Web API 响应添加属性? 的相关文章

随机推荐

  • MacVim 中的智能窗口大小调整与分割

    我正在使用最新的 MacVim 有没有办法让我在没有文件或只有一个文件的情况下打开 MacVim 它会将窗口宽度设置为 n 个字符 那么如果我进行垂直分割 它会将窗口宽度扩展到 2n 个字符 与 3 个垂直分割相同 但在窗口达到 3n 个字
  • scala 中的柯里化语法

    scala 中柯里化的语法例如 def f x Int b Int x y is def f x Int b Int x y 对于给定范围 a 和 b 的 sum 到 sum 的柯里化是 def sum f Int gt Int a Int
  • RecyclerView 中的 EditText 值在第 5 个位置后给出相同的值

    我有一个RecyclerView每行都有一个EditText还 我正在添加项目到RecyclerView通过搜索它们 然后在编辑文本中输入数量 然后我将它发送到服务器以使用json格式存储 项目添加工作正常 滚动时也不存在编辑文本值交换问题
  • jtextpane 不换行文本

    我有一个问题文本窗格 我需要用指定的颜色标记文本的某些部分 因此我决定使用 JTextPane 和 html 标签来装饰我的文本 JTextPane 位于 JScrollPane 内部 JScrollPane 位于 JSplitPane 内
  • 无法正确读取 python 中的 SQL 表:varchar 列作为逗号分隔字符/元组导入

    我使用以下代码连接到 Oracle 数据库 jar ojdbc8 jar path jvm path jvm dll path args Djava class path s jar jpype startJVM jvm path args
  • Sails.js bodyParser - 版本 0.10.5 上的请求实体太大

    我试图将大量数据发布到我的 sails API 但收到此 413 错误 Unable to parse HTTP body error occurred Error request entity too large 我已经尝试了不同讨论中建
  • 如何使用 PowerShell 从 REPL 控制台将特定 CSV 列转换为 TitleCase?

    根据提供的答案修改工作 PS home nicholas powershell gt PS home nicholas powershell gt Get Content case csv ForEach Object ToUpper FJ
  • 使用 jQuery 检查互联网连接是否存在? [复制]

    这个问题在这里已经有答案了 如何使用 jQuery 检查是否有互联网连接 这样我就可以有一些条件说 在生产过程中使用 google 缓存版本的 JQuery 在开发过程中使用该版本或本地版本 具体取决于互联网连接 针对您的具体情况的最佳选择
  • 在 VB.NET 中将焦点更改到另一个窗口

    我正在使用 VB NET 需要激活某个窗口 这可能吗 如果是这样 怎么办 您将需要使用 Win32 API 来执行此操作 首先 通过调用找到您想要置于前面的窗口查找窗口获取其句柄 然后使用设置前景窗口API 将其带到前台 PInvoke包含
  • 有人能给我一个 jQuery 动画函数的独立代码吗

    最近我问了这个问题 想了解Animate函数 计算和步进 我得到了答复 我尝试删除不必要的 jQuery 代码 只保留 jQuery 动画功能 如果有人能给我提供具有他们技术的 jQuery 动画函数 我将非常感激 创建动画实际上非常简单
  • wsdl 错误:标题和文档没有正确分离

    我正在使用 NUSOAP 来使用 microsoftdynamics 的肥皂接口 我收到此错误 wsdl 错误 获取https testserver2013 api crm4 dynamics com XRMServices 2011 Or
  • WQL 不支持 TOP - 需要解决方法

    WQL 基本上是 WMI 的 SQL 不支持 TOP 或 LIMIT 关键字 Sql Server 使用 TOP 和许多其他 RDBMS 支持 LIMIT 等 是否有一种解决方法可以模拟 SELECT 查询的行为 就好像它具有将结果集限制为
  • 在 NHibernate Criteria 查询中连接多个字段

    我有一个Dept表和一个Emp table 我需要以这样的方式连接这两个表where子句看起来像这样 where dept deptId emp DeptId and dept deptName emp empTrainingName 我试
  • 限制android应用程序apk的共享

    我是安卓新手 我有一个应用程序 我必须限制用户将应用程序的 apk 文件共享给其他手机 Android 手机持有者 就像如果我将 apk 文件保存在我自己的网站中 那么我希望用户可以从我的网站下载 apk 而不能与其他人共享相同的 apk
  • Google Reader API - 获取提要

    有谁知道用户是否可以调用 Google Reader 服务来获取属于特定标签 类别的所有提要的名称 uri 谢谢 您可以使用以下代码的变体来访问 Google 阅读器系统 您需要在每个请求中发送标头 Authorization auth m
  • 如何检测 mithril.js 中的模型参数更改事件?

    我最近开始学习 mithril js 我想知道如何制作非常基本的模型 gt 查看单向数据绑定应用程序 TestModel function data this name m prop data name testModel new Test
  • PHP计算时间差大于24小时

    当时间大于 24 小时时 计算时间差的最佳方法是什么 Example time1 76 00 00 time2 30 00 00 result should be 46 00 00 echo date H i s strtotime tim
  • 如何锁定文本区域的第一个单词?

    基本上我需要创建一个字符限制的文本区域 但开头有一个单词 它们无法更改 它需要成为文本区域的一部分 但我不希望用户能够删除它或编辑它 我想我可以使用创建一个 JQuery 函数blur 以防止用户退格 但我还需要防止他们选择该单词并将其删除
  • 每分钟呼叫功能

    我编写的每分钟调用一个函数的代码我认为是有缺陷的 因为它在一段时间内很好 但自页面加载以来每小时往往会落后约 15 秒 老实说 我无法弄清楚是什么导致了滞后 也许是函数执行所需的时间 小失误全部加起来并累积起来 有没有一种方法可以在调用函数
  • 如何向未存储在数据库中的 Web API 响应添加属性?

    我正在使用 Entity Framework 6 0 构建 C Web API 我有一个最简单的用户类 它有 3 个属性 我将它们通过 SQL 持久保存到具有 3 个相应列的用户表中 其中 UserID 是其主键 public partia