【问题标题】:MVC Action Attribute that checks parameter has value?检查参数的 MVC 操作属性是否具有值?
【发布时间】:2014-12-18 01:24:48
【问题描述】:

我的 ASP.NET MVC 站点中有一些具有一个参数的操作。所有这些操作的第一行代码检查参数是否不为空,如果是,则重定向到允许他们为参数选择值的页面。

例如:

    public ActionResult Summary(string client)
    {
        if (String.IsNullOrEmpty(client))
            return RedirectToAction("Select");

        return View();
    }

我想创建一个执行上述代码的属性,因此我不必在每个操作中都重复它。比如:

    [ClientRequired]
    public ActionResult Summary(string client)
    {
        return View();
    }

然后ClientRequiredAttribute 会检查客户端参数的值,如果为空/null,则重定向到选择客户端页面。这样的属性可能吗?

-shnar

【问题讨论】:

    标签: c# asp.net asp.net-mvc attributes


    【解决方案1】:

    是的,有可能。

    应该是这样的:

    public class ClientRequiredAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            object parameter = null;
            filterContext.ActionParameters.TryGetValue("client", out parameter);
            var client = parameter as string;
    
            if (string.IsNullOrEmpty(client))
            {
                var urlHelper = new UrlHelper(filterContext.Controller.ControllerContext.RequestContext);
    
                var url = urlHelper.Action("Select", "ControllerName");
    
                filterContext.Result = new RedirectResult(url);
            }
        }
    }
    

    PS:未经测试,但应该可以。

    【讨论】:

      【解决方案2】:

      在 ASP.NET MVC 5 中,您可以使用属性路由。

      http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx

      public class ReviewsController : Controller
      {
          // eg: /reviews
          [Route("reviews")] 
          public ActionResult Index() { ... }
          // eg: /reviews/5
          [Route("reviews/{reviewId}")] 
          public ActionResult Show(int reviewId) { ... }
          // eg: /reviews/5/edit
          [Route("reviews/{reviewId}/edit")] 
          public ActionResult Edit(int reviewId) { ... } 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 2020-06-08
        • 1970-01-01
        • 2022-06-25
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        相关资源
        最近更新 更多