WebAPI 控制器中的自动映射器

2024-01-10

我有一个 Car WebAPI 控制器方法,如下所示 - 注意 _carService.GetCarData 返回 CarDataDTO 对象的集合

[HttpGet]
[Route("api/Car/Retrieve/{carManufacturerID}/{year}")]
public IEnumerable<CarData> RetrieveTest(int carManufacturerID, int year)
{
    //Mapper.Map<>
    var cars = _carService.GetCarData(carManufacturerID, year);
    //var returnData = Mapper.Map<CarData, CarDataDTO>();
    return cars;
}

CarData 是我创建的一个 WebAPI 模型。

public class CarData
{
    public string Model { get; set; }
    public string Colour { get; set; }
    //other properties removed from brevity
}

CarDataDTO 是我创建的一个类,用于对数据库表进行建模 - 我通过用 dapper 调用的存储过程检索数据。

public class CarDataDTO
{
    public int CarID { get; set; }
    public int CarManufacturerID { get; set; }
    public int Year { get; set; }
    public string Model { get; set; }
    public string Colour { get; set; }
    //other properties removed from brevity
}

如果我的 API 控制器中的 var cars 行有一个断点,我可以看到所有内容按预期返回,并且我有一个 CarDTO 对象的集合。但是,我不需要 WebAPI 返回 CarDataID、CarID 或 Year,这就是我创建 CarData API 模型的原因。

如何轻松地使用 Automapper 来仅映射我关心的属性?

我需要在 WebApiConfig 类中设置一些内容吗?


您可以从以下位置安装 AutoMapper nuget 包:自动映射器 https://www.nuget.org/packages/AutoMapper/然后声明一个类,例如:

public class AutoMapperConfig
{
    public static void Initialize()
    {
        Mapper.Initialize((config) =>
        {
            config.CreateMap<Source, Destination>().ReverseMap();
        });
    }
}

然后在 Global.asax 中这样调用它:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AutoMapperConfig.Initialize();
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

如果你想忽略某些属性,那么你可以这样做:

Mapper.CreateMap<Source, Destination>()
  .ForMember(dest => dest.SomePropToIgnore, opt => opt.Ignore())

使用它进行映射的方式是:

DestinationType obj = Mapper.Map<SourceType, DestinationType>(sourceValueObject);
List<DestinationType> listObj = Mapper.Map<List<SourceType>, List<DestinationType>>(enumarableSourceValueObject);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebAPI 控制器中的自动映射器 的相关文章

  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 包恢复失败。回滚包更改 - Serilog.AspNetCore

    我有一个 asp net Core 项目 我正在尝试向其中添加一个记录器 我选择了我在其他项目中使用过的 SeriLog 但是当我尝试添加 Serilog AspNetCore 我得到的软件包版本 2 0 0 包恢复失败 回滚 后端 的包更
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 将键码转换为相关的显示字符

    在 C Windows Forms 项目中 我有一个不提供 KeyPressed 事件的控件 它是一个 COM 控件 ESRI 映射 它仅提供 KeyUp 和 KeyDown 事件 包含关键事件参数 http msdn microsoft
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其

随机推荐

  • 打印哈希码代替数组元素[重复]

    这个问题在这里已经有答案了 我创建了一个程序 其中有一个名为 Student 的新类 它设置和获取不同的变量 例如姓名 GPA 是否注册以及何时注册 这是一个字符串 它的目的是 问题是 当我尝试将信息存储到数组和 或数组列表中并打印它时 我
  • RSVP - 用承诺处理超时

    我正在使用 ember js 和 RSVP 据我所知 没有任何东西可以处理异步调用的超时 我的想法是使用装饰器模式包装解析处理程序 将解析处理程序包装在某些代码中 这些代码将计时调用并在发生超时时调用拒绝 这听起来是个好主意吗 还是有一些内
  • Android:意图的 setFlags 和 addFlags 之间有什么区别

    setFlags 和 addFlags 对于意图有什么区别 请任何人解释一下 帮助表示赞赏 当你使用setFlags您正在替换旧标志 当您使用addFlags您正在附加新标志 请记住 标志只是一个整数 它是 2 的幂 在二进制中 标志如下所
  • 当委托传递到另一个 AppDomain 时,是否可以将它们编组为代理?

    不知何故 我假设传递给另一个 AppDomain 的委托将变成代理 就好像它是派生自的对象一样MarshalByRefObject 不幸的是 他们似乎没有 假设我的代码中有一个类MyClass像这样 Serializable public
  • Git 子模块与包管理器的私有源

    使用本地包管理器 例如 pip 或 npm 比使用 git 子模块有什么优势 git is a 发展工具 您在开发期间使用它 但在部署期间不使用它 pip是一个部署工具 在开发过程中 您使用它来安装必要的库 在部署期间 您的用户使用它来安装
  • 我如何重写基类的 == 运算符,以便调用重写

    使用如下代码 public class Task string Name public static bool operator Task t1 Task t2 return t1 Name t2 Name t1 GetType t2 Ge
  • 在shinyapps.io中部署R应用程序-错误:解析清单

    我想简单地在shinyapps io 网站上发布我的应用程序 当我运行deployApp 时 我收到以下消息 错误 未处理的异常 子任务 32916512 失败 解析清单时出错 不支持的区域设置 4409 4409 UTF 8 执行停止 P
  • jquery可以做到这一点吗?弹出窗口获取值

    当用户单击父窗口中的按钮时 我使用 JavaScript 打开一个新窗口 子窗口 在新窗口 子窗口 上 我有文本框和按钮 当用户单击按钮时 我需要获取文本框的值并传递给父窗口 在关闭子窗口时 我需要将更新后的值插入到父窗口中 无需刷新父窗口
  • .NET Framework (mscorlib) 中的错误阻止堆栈跟踪行号(在便携式 pdb 中)?

    更新 正如评论中指出的 下面的代码指的是可移植的pdb 可移植的 pdb 与我的情况无关 但使用沙盒应用程序域和可移植的 pdb 的人们可能仍然会对这个问题感兴趣 我正在受限沙箱 AppDomain 内运行代码 从此沙箱中抛出的异常没有附加
  • 一个页面主题 Bootstrap 导航链接不会定向到另一页面,但它适用于页面内的锚点

    我一直在我的 ASP MVC 5 应用程序中使用引导单页主题 由于它是一页 因此所有导航链接都指向页面内的锚点 然后我需要一个额外的链接来定向到另一个页面 但它不起作用 当我看到源代码时 href 很好 悬停也很好 但是单击时它什么也不做
  • JBoss 7 正在尝试从 JBoss bin 加载模块库

    我有一个模块 描述如下
  • OpenGL 色彩空间转换

    有谁知道如何使用 YUV 色彩空间创建纹理 以便我们可以获得基于硬件的 YUV 到 RGB 色彩空间转换 而无需使用片段着色器 我使用的是 NVidia 9400 但我没有看到明显的 GL 扩展似乎可以解决问题 我找到了如何使用片段着色器的
  • 使用 Python 3 时,Celery 'module' 对象没有属性 'app'

    我正在学习芹菜教程 他们正在使用Python2 而我正在尝试使用python3来实现相同的功能 我有2个文件 celery proj py from celery import Celery app Celery proj broker a
  • Python中嵌套列表的总和

    我尝试对嵌套元素列表求和 e g numbers 1 3 5 6 7 8 应该产生sum 30 我写了以下代码 def nested sum L sum 0 for i in range len L if len L i gt 1 sum
  • 如何判断触控板点击的NSEvent,而不是点击点击

    当 点击点击 被选中时 如何判断NSEvent是来自触控板点击 按下 还是点击点击 void mouseEvent NSEvent theEvent if type NSLeftMouseUp type NSLeftMouseDown th
  • Node.js 的打包/解包函数 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有类似python的struct模块为nodejs提供pack unpack功能的模块 我还没有找到
  • 如何在没有登录页面的情况下使用 NextAuth.js 进行身份验证(使用邮递员)

    到目前为止 在我的Next js我已经完成了我的应用程序signup 我被要求做身份验证 登录 using next auth具有自定义凭据 我必须做一个rest API端点 api auth login 我知道如何使用登录页面执行此操作
  • 当所有字段都填满时启用按钮

    我正在使用knockout js进行数据绑定 实际上有一个表单 其中一些字段接受姓名 号码 电子邮件等 假设如果任何一个字段未填写并且按下保存按钮 那么该按钮将进入禁用状态 到目前为止它工作正常 现在 如果我填写空白字段 那么我想再次启用该
  • 权威的Excel范围语法参考

    抱歉 如果之前有人问过这个问题 但我找不到 我正在寻找可用作参考的所有有效字符串的权威描述 例如 A1 C5 A A A2 等 这似乎是一个非常基本的事情 但我 我浪费了几个小时试图找到它 我所能找到的只是一堆 有用 的示例 但没有参考 这
  • WebAPI 控制器中的自动映射器

    我有一个 Car WebAPI 控制器方法 如下所示 注意 carService GetCarData 返回 CarDataDTO 对象的集合 HttpGet Route api Car Retrieve carManufacturerID