asp.net – Web API可查询 – 如何应用AutoMapper?
|
我有一个简单的WebApi方法像这样装饰了OData可查询属性。 [Queryable]
public virtual IQueryable<PersonDto> Get()
{
return uow.Person().GetAll()); // Currently returns Person instead of PersonD
}
我想做的是在WebAPI将结果转换为JSON之前,使用AutoMapper将查询的结果从Person类型转换为PersonDto。 有人知道我能做到吗我知道,我可以在GetAll()调用之后应用Mapper.Map,然后转换回IQueryable,但是这将导致在应用OData过滤器之前返回和映射整个表(不好!)。 看来,这个问题ASP.NET Web API return queryable DTOs?涵盖了相同的问题(请参阅第二个回应来获得更好的答案),其中建议是使用自定义MediaTypeFormatter在链末尾使用AutoMapper,但是我不知道如何做到这一点我见过的例子 任何帮助将得到感谢! – 更多信息 我查看了IQueryable的源代码,但不幸的是,我看不到任何方法利用这个代码。我设法写了一个似乎工作的附加过滤器,但并不一定不优雅。 public class PersonToPersonDtoConvertAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
{
HttpResponseMessage response = actionExecutedContext.Response;
if (response != null)
{
ObjectContent responseContent = response.Content as ObjectContent;
var query = (responseContent.Value as IQueryable<Student>).ToList();
response.Content = new ObjectContent<IEnumerable<StudentResource>>(query.ToList().Select(Mapper.Map<Person,PersonDto>),responseContent.Formatter);
}
}
}
然后我已经装饰了这样的动作 [Queryable]
[PersonToPersonDtoConvert]
public IQueryable<Person> Get()
{
return uow.GetRepo<IRepository<Person>>().GetAll();
}
解决方法有一个更好的解决方案。尝试这个:public virtual IQueryable<PersonDto> Get(ODataQueryOptions<Person> query)
{
var people = query.ApplyTo(uow.Person().GetAll());
return ConvertToDtos(people);
}
这将确保查询运行在Person而不是PersonDTO。如果您希望通过属性而不是代码进行转换,那么您仍然希望实现类似于您所提供的操作过滤器。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 了解nopCommerce的MVC标签
- asp.net-mvc – 基于Route Params的ASP.NET MVC授权
- asp.net-mvc – 如何获得html.ActionLink结果文本的href部分
- asp.net – 如何在SQL4的log4net配置中使用存储过程进行日志
- asp.net-mvc – ASP.NET MVC:从控制器返回CDN图像
- 如何使我的ASP.NET服务器控件将嵌入式代码块作为属性值?
- asp.net – 从global.asax – mvc重定向到一个动作
- ASP.NET / IIS7 Url重写映射不起作用
- asp.net – 在.NET 4.5 Azure部署中找不到编译器可执行文件
- asp.net-mvc – 逐渐将现有的ASP.NET站点转换为MVC的最佳方
- msbuild – 通过TFS 2015部署ASP.NET 5(vNext)
- 从旧的经典ASP页面设置301重定向到新的ASP.NET W
- 更改ASP.NET缓存项到期的频率?
- ASP.NET MVC 3 Razor – jQuery Intellisense
- asp.net – 多租户应用程序的输出缓存,因主机名和
- asp.net-mvc – 在ASP.net MVC 2.0中使用Url.Con
- 在asp.net中使用Eval()是什么
- 在ASP.Net应用程序中执行Server.MapPath的最有效
- asp.net-mvc-4 – 错误:在VS2012中将MVC4升级到
- asp.net-mvc – ASP.NET MVC:添加将DisplayName
