2

我有一个非常简单的问题,但我正在寻找以下问题的“最佳”解决方案:

我有多个控制器操作,如下所示:

public ActionResult DoSomething(PackageViewModel packageByName, DoSomethingInputModel inputModel)
{
    if (packageByName == null)
    {
        Response.StatusCode = 404;
        Response.StatusDescription = "Package not found : " + RouteData.GetRequiredString("packageName");
        return View("Error");
    }
    ...

隔离这种横切关注点的最佳方法是什么?

  • 我可以做一个功能
  • 我可以使用 PostSharp 之类的 AOP 工具
  • 动作过滤器
  • 其他?
4

2 回答 2

2

实际上ActionFilter是一个AOP。编写你自己的ActionFilter实现来检查参数是否不是null。如果您总是需要在控制器执行开始时检查相同的事情,那么这是最好的方法。它易于编写,可在整个应用程序中重复使用,非常符合 MVC 2。

于 2010-08-16T06:06:11.860 回答
0

Here's what I implemented (based on @ŁukaszW.pl answer)
Hopefully this will save someone some time.

public class GuardAgainstNullPackage : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        BookingController controller = ((BookingController)filterContext.Controller);
        if (filterContext.ActionParameters["packageByName"] == null || !(filterContext.ActionParameters["packageByName"] is PackageViewModel))
        {
            controller.Response.StatusCode = 404;
            controller.Response.StatusDescription = "Package not found : " + filterContext.RouteData.GetRequiredString("packageName");
            filterContext.Result = new ViewResult() { ViewName = "Error" };
        }
        base.OnActionExecuting(filterContext);
    }
}
于 2010-08-16T21:48:38.223 回答