Asp.net mvc 2 asp.net MVC 2-隔离保护代码的最优雅方式-防止空控制器参数
我有一个非常简单的问题,但我正在寻找以下“最佳”解决方案: 我有多个控制器动作,如下所示:Asp.net mvc 2 asp.net MVC 2-隔离保护代码的最优雅方式-防止空控制器参数,asp.net-mvc-2,aop,cross-cutting-concerns,Asp.net Mvc 2,Aop,Cross Cutting Concerns,我有一个非常简单的问题,但我正在寻找以下“最佳”解决方案: 我有多个控制器动作,如下所示: public ActionResult DoSomething(PackageViewModel packageByName, DoSomethingInputModel inputModel) { if (packageByName == null) { Response.StatusCode = 404; Response.StatusDescripti
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
是一个AOP。如果参数不是null
,则将自己的ActionFilter
实现写入chceck。如果您总是需要在控制器执行过程中检查相同的内容,那么这是最好的方法。它易于编写,可在整个应用程序中恢复,非常适合MVC2。以下是我实现的内容(基于@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);
}
}
(勾选)如果有人在he实施细节方面遇到困难,请参阅我的答案。