检查参数具有值的 MVC 操作属性

本文关键字:MVC 操作 属性 参数 检查 | 更新日期: 2023-09-27 18:34:21

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

例如:

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

我想创建一个属性来执行类似于上述代码的操作,因此我不必在每个操作中重复它。 像这样:

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

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

-施纳尔

检查参数具有值的 MVC 操作属性

是的,这是可能的。

它会是这样的:

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:未经过测试,但它应该可以工作。

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

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) { ... } 
}