小编Mar*_*tin的帖子

DataAnnotations或在服务中手动验证?

每次我开始处理新的ASP.NET MVC Web应用程序时,我都不确定是否使用DataAnnotations验证.关于它的事情感觉不对.

例如,假设我有UserService一个CreateUserModelCreate动作传递的AccountController.为确保用户始终提供名称,我将模型的Name属性设置为具有该[Required]属性.我现在安全地知道模型活页夹CreateUserModel除非有名字,否则不会给我一个.

我的问题是,为了UserService成为我系统的可重用组件,它不能依赖上面的层提供有效数据的事实,当然还必须验证这些数据.当您考虑要编写完全重用UserService(并且不会使用模型绑定器对其进行所有数据注释验证)的Web服务时,对此的需求会进一步突出显示.

所以我的问题是:这种情况的最佳做法是什么?使用数据注释进行验证并在服务中重复该验证?仅在服务中验证并抛出异常?两者兼而有之?

我希望我的问题不是太主观,我主要是试图就是否最终将验证转移到数据注释上达成共识.

validation asp.net-mvc three-tier

9
推荐指数
2
解决办法
2749
查看次数

AutoMapper:用户特定映射

我有一个SearchServiceSearch()检索的方法IEnumerable<Search>从一个存储库.这些Search对象直接来自LINQ To SQL.接下来我使用AutoMapper将这些Search类型转换为SearchModel类型(稍后它们会被传递到控制器中).

var searches = searchRepository.GetByUserID(userID);        
var models = Mapper.Map<IEnumerable<Search>, IEnumerable<SearchModel>>(searches);
Run Code Online (Sandbox Code Playgroud)

问题是Search有一个属性DateCreated是UTC DateTime.我需要根据登录用户的当地时区更正日期.我可以foreach在服务内部执行此操作,如下所示:

var searches = searchRepository.GetByUserID(userID);   

foreach (var search in searches)
{
    search.DateCreated = search.DateCreated.ToTimezone(userTimezoneID);
}

var models = Mapper.Map<IEnumerable<Search>, IEnumerable<SearchModel>>(searches);
Run Code Online (Sandbox Code Playgroud)

虽然这有效(并且可能是唯一的选择),但我想使用AutoMapper IValueFormatter.例如,我有一些其他值格式化程序,例如相对时间.

我的问题是:这可以做到吗?我不确定,因为我想我需要将其他信息传递给AutoMapper,以便它知道用于进行转换的时区ID.

我也试图避免从Search- > User关系中得到这个,因为我在用户登录时将它存储在cookie中(并且希望避免数据库JOIN检索它).如何将此时区ID传递给AutoMapper,以便它可以为每个用户执行自定义映射?

c# automapper

2
推荐指数
1
解决办法
1514
查看次数

标签 统计

asp.net-mvc ×1

automapper ×1

c# ×1

three-tier ×1

validation ×1