C# 控制器上的ASP.NET MVC验证

C# 控制器上的ASP.NET MVC验证,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,我的应用程序中有多个控制器。我有一个场景,在满足条件之前,用户不允许加载/访问某些控制器。e、 g.有一个PaymentController和一个afterPaymentController,现在如果我在URL中像afterPaymentController/index一样写入afterPaymentController,它将返回视图,我要做的是首先验证是否建立了Paymnet,然后验证是否加载了控制器 在单个控制器中有多个视图,几乎所有视图都需要此检查 请注意,有10多个控制器都需要此检查 如

我的应用程序中有多个控制器。我有一个场景,在满足条件之前,用户不允许加载/访问某些控制器。e、 g.有一个PaymentController和一个afterPaymentController,现在如果我在URL中像afterPaymentController/index一样写入afterPaymentController,它将返回视图,我要做的是首先验证是否建立了Paymnet,然后验证是否加载了控制器

在单个控制器中有多个视图,几乎所有视图都需要此检查

请注意,有10多个控制器都需要此检查

如何在ASP.NET MVC中实现这一点

public class PaymentController : Controller{

 public View Index(){
     View();
   }
}

public class afterPaymentController: Controller{

 public View Index(){
   // I can add a check here that if payment is not made
   // redirect to PaymentController but I have multiple number of 
   //controllers 
   // so any good solution here
    View();
   }
}
如果有人在付款/索引时写入url,并将其替换为afterPayment/Index,他将被重定向到afterPayment

您可以使用过滤器:并在操作之前创建要执行的特定逻辑


另一种方法是在控制器中使用策略来指定允许的条件:

当访问某个控制器时,您可以创建int类型的标志变量并增加一个变量,并且不要忘记将其放入会话中,因为在每个控制器中,您必须从会话中获取标志值,并在每个控制器中设置一个条件以检查itflag值。
如果不满足某些条件,则使用重定向到ActionHome,home

该控制器已加载…您所说的加载到底是什么意思?控制器是一个类。你真的是说,在满足其他条件之前,用户不应该在控制器中运行特定的操作方法吗?请澄清。给出一个具体的例子和一些示例代码也会有所帮助。谢谢。不管怎么说,似乎某种自定义操作过滤器在这里可能很有用,可以运行代码来检查特定的付款是否经过验证。但是,为了提出一个具体、详细的解决方案,您需要提供更多的信息。@ADyson问题如果更具描述性,请编辑,谢谢。如果您需要在多个地方应用此方法,那么我认为要么创建一个单独的类和方法来执行此检查,然后您可以从所有相关的操作方法调用该检查,或者,实现相同的事情,但使用一个操作过滤器,然后您可以应用于所有相关的操作或整个控制器,如果您愿意的话。这样您就得到了一个可重用的解决方案。被访问的控制器听起来不足以实现此目的。OP需要验证是否已付款。仅仅访问付款操作并不意味着付款实际发生了,它很容易被拒绝。此外,它没有考虑到在一个用户会话中可能很容易进行多笔支付。这是一个非常天真和简单的方法。我有一个场景,在满足条件之前,用户不允许加载/访问某些控制器。这是一个问题,如果某个用户试图访问它,那么如果他已经完成了支付,那么允许以其他方式重定向到指定的、指定的操作。我的逻辑是通过创建variableint类型来解决问题,将其放入会话中,然后执行进一步的过程来检查它。通过设置会话,我们可以在其他控制器中访问它,也可以理解您的逻辑。但你的逻辑是错误的。a具体付款或不付款。因此,一个简单的真/假布尔值就足够了。不需要整数计数。b您没有考虑多次付款的可能性。最好是简单地获取支付ID,然后检查数据库,看看它是否被授权。那么也不需要进行会话。c您正在评估错误的标准-验证是否按照您的建议进行Paymnet。该问题与按照您的建议访问某个控制器时不同。我使用了这些方法,我面临的问题是,在请求执行过程中,两个重写函数ActionExecuting和ActionExecuted被多次调用。我需要在请求中调用它一次。如何实现这一目标。