通过url模式限制操作方法的Action属性

时间:2016-06-24 17:02:06

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

是否存在允许按网址格式限制操作方法的操作属性?

在我的控制器中,我想要两个SearchOrder操作。一个用于编辑订单,一个用于查看订单。如果url路径是/ Order / EditOrder / SearchOrder / 1,我希望它执行此操作。

    [HttpGet]
    [ActionName("SearchOrder")]
    public ActionResult EditOrderSearchOrder()
    {
         . . . .
    }

但是如果url路径是/ Order / ViewOrder / SearchOrder / 1,我希望它执行此操作。

    [HttpGet]
    [ActionName("SearchOrder")]
    public ActionResult ViewOrderSearchOrder()
    {
         . . . .
    }

1 个答案:

答案 0 :(得分:2)

有很多方法。他们之中有一些是 写在RouteConfig.cs

routes.MapRoute(
    name: "Properties",
    url: "Order/EditOrder/SearchOrder/{action}/{id}",
    defaults: new
    {
        controller = "YourControllerName",
        action = "SearchOrder",\\ bcoz you have given action name attribute otherwise your method name
        id = UrlParameter.Optional \\ you can Change optional to Fixed to make passing Id parameter compulsory 
    }
);

如果使用Mvc5,您可以按照简单的语法进行属性路由:

[Route("Order/EditOrder/SearchOrder/{id?}")] // ? For optional parameter 
public ActionResult EditOrderSearchOrder(){}

和 要启用属性路由,请在RouteConfig.cs中调用MapMvcAttributeRoutes

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

        routes.MapMvcAttributeRoutes();
    }
}