我已经构建了一个自定义操作筛选器以验证Web Service返回参数.如果未验证参数,则ActionFilter会将用户重定向到维护页面.
这是我的动作过滤器
public class RequireWSValidation : ActionFilterAttribute
{
public String Controller { get; set; }
public String Action { get; set; }
public String ValidationParam { get; set; }
public RequireWSValidation()
: this(null, null)
{
}
public RequireWSValidation(string controller, string action)
: this(controller, action, "WSOk")
{
}
public RequireWSValidation(string controller, string action, string viewDataParam)
{
Controller = controller;
Action = action;
ValidationParam = viewDataParam;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Controller.ViewData[ValidationParam] == null)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = Controller, action = Action }));
}
else if ((Boolean)filterContext.Controller.ViewData[ValidationParam] == false)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = Controller, action = Action }));
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制者:
[RequireWSValidation(Controller = "Home", Action = "Maintenance", ValidationParam = "WSOk")]
public ActionResult About()
{
ViewData["WSOk"] = true;
return View();
}
public ActionResult Maintenance()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
现在我想单元测试这个ActionFilter行为.但是Action"About"总是返回一个ViewResult,所以我无法测试ActionFilter是否将用户重定向到维护页面.
我的单元测试:
[Fact]
public void Should_Redirect_To_Maintenance_On_WS_Error()
{
var controller = new HomeController();
controller.ViewData["WSOk"] = false;
var result = controller.About() as RedirectToRouteResult;
Assert.NotNull(result);
Assert.Equal(result.RouteValues["controller"] as String, "Home");
Assert.Equal(result.RouteValues["action"] as String, "Maintenance");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |