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ツールを使用できます
  • ActionFilter
  • 他の?
4

2 に答える 2

2

実際ActionFilterにはAOPです。ActionFilterパラメータが。でない場合は、chceckに独自の実装を記述しますnull。コントローラの実行の開始時に常に同じことを確認する必要がある場合は、それが最善の方法です。書くのは簡単で、アプリケーション全体で再利用可能で、非常にMVC2です。

于 2010-08-16T06:06:11.860 に答える
0

これが私が実装したものです(@ŁukaszW.plの回答に基づいています)
これで誰かの時間を節約できることを願っています。

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 に答える