检查参数具有值的 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 将检查客户端参数的值,如果为空/空,则重定向到选择客户端页面。这样的属性可能吗?
-施纳尔
是的,这是可能的。
它会是这样的:
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) { ... }
}