【发布时间】:2011-03-03 07:49:47
【问题描述】:
因此,就字段验证而言,我使用 Fluent Validation 和我的服务层验证关闭了我的视图模型验证,但我的问题是你如何处理诸如“你的信用卡被拒绝”之类的错误,与输入验证以外的逻辑有关吗?
【问题讨论】:
因此,就字段验证而言,我使用 Fluent Validation 和我的服务层验证关闭了我的视图模型验证,但我的问题是你如何处理诸如“你的信用卡被拒绝”之类的错误,与输入验证以外的逻辑有关吗?
【问题讨论】:
信用卡被拒绝不是验证错误,而是付款处理尝试的结果。例如,假设您有一个支付网关服务,该服务返回一个 PaymentProcessingResult 类,该类的状态可以是已批准或已拒绝,并可能是拒绝的原因:
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 字典来存储下一个请求的消息,而不是显示付款拒绝视图。
【讨论】: