我的ViewModel有验证属性,确保它不会是空的等等 - 这是否足够,或者我是否应该让我的代码合同也在ActionResult中?
示例:
// CreateCaseViewModel.cs
public class CreateCaseViewModel
{
[Required]
public string Topic { get; set; }
[Required]
public string Message { get; set; }
}
// CaseController.cs
[AuthWhere(AuthorizeRole.Developer)]
[HttpPost]
public ActionResult Create(CreateCaseViewModel model)
{
if(!ModelState.IsValid)
{
// TODO: some cool stuff?
}
if (string.IsNullOrWhiteSpace(model.Message))
{
throw new ArgumentException("Message cannot be null or empty", model.Message);
}
if (string.IsNullOrWhiteSpace(model.Topic))
{
throw new ArgumentException("Topic cannot be null or empty", model.Topic);
}
var success = false;
string message;
var userId = new Guid(_membershipService.GetUserByUserName(User.Identity.Name).ProviderUserKey.ToString());
if(userId == Guid.Empty)
{
throw new ArgumentException("UserId cannot be empty");
}
Case createCase = _caseService.CreateCase(model.Topic, model.Message);
if(createCase == null)
{
throw new ArgumentException("Case cannot be null");
}
if(_caseService.AddCase(createCase, userId))
{
message = ControllerResources.CaseCreateFail;
}
else
{
success = true;
message = ControllerResources.CaseCreateSuccess;
}
return Json(new
{
Success = success,
Message = message,
Partial = RenderPartialViewToString(ListView, GetCases)
});
}
答案 0 :(得分:1)
您的代码对我来说没有多大意义。
throw new ArgumentException
将返回错误500(服务器错误)。您最好遵循REST原则并发回适当的错误代码(例如402错误请求以及错误的适当描述)或返回您的JSON成功= false和相应的错误消息。
即使模型无效,您的代码似乎也会跟随。如果有效,叉必须包括 - >保存,否则将错误发送给客户。
您似乎没有使用模型错误消息。它们非常有用,您可以在ModelState
。
你解决了这些问题,我认为你的代码很好。