Validation ASP.NET MVC验证

Validation ASP.NET MVC验证,validation,asp.net-mvc-3,Validation,Asp.net Mvc 3,因此,我使用Fluent validation进行视图模型验证,并在现场验证时进行服务层验证,但我的问题是,如何处理诸如“您的信用卡被拒绝”之类的错误,这些错误与输入验证以外的逻辑有关?被拒绝的信用卡不是验证错误,相反,它是付款处理尝试的结果。例如,假设您有一个支付网关服务,该服务返回PaymentProcessInResult类,该类的状态可以是“已批准”或“已拒绝”,并带有拒绝的可能原因: class PaymentProcessingResult { bool IsApproved

因此,我使用Fluent validation进行视图模型验证,并在现场验证时进行服务层验证,但我的问题是,如何处理诸如“您的信用卡被拒绝”之类的错误,这些错误与输入验证以外的逻辑有关?

被拒绝的信用卡不是验证错误,相反,它是付款处理尝试的结果。例如,假设您有一个支付网关服务,该服务返回PaymentProcessInResult类,该类的状态可以是“已批准”或“已拒绝”,并带有拒绝的可能原因:

class PaymentProcessingResult {
    bool IsApproved { get; set; }
    string DeclineReason { get; set; }
}

interface IPaymentGateway {
  PaymentProcessingResult ProcessPayment(PaymentInfo p);
}
然后,在调用此支付网关服务的控制器中,您可以提供适当的响应:

class CheckoutController : Controller {

  IPaymentGayeway paymentGateway;

  [HttpPost]
  public ActionResult ProcessPayment() {
     var paymentInfo = /* get payment info, from a shopping cart or the like */;

     var paymentResponse = this.paymentGateway.ProcessPayment(paymentInfo);

     if (paymentResponse.IsApproved) return View("PaymentReceipt");
     else return View("PaymentDeclined", paymentRespone);

  }
}
出于安全原因,请确保不要透露太多有关拒绝原因的信息。被拒绝的付款可以通过多种方式传达。不显示付款拒绝视图,您可以重定向回输入付款信息的页面,突出显示并显示其中的消息,可能使用TempData dictionary存储下一个请求的消息