是否可以在运行时动态指定动作名称?

|
string actionName = \"Users\";

[HttpGet]
[ActionName(actionName)]
public ActionResult GetMe()
{

}
...给出:非静态字段,方法或属性需要对象引用 虽然那只是一个测试,有没有办法做到这一点?如果是这样,我可以重复使用相同的Controller并可能即时创建新的URI ...对吗?     
已邀请:
        假设您具有以下控制器:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}
您可以编写一个自定义路由处理程序:
public class MyRouteHander : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        var rd = requestContext.RouteData;
        var action = rd.GetRequiredString(\"action\");
        var controller = rd.GetRequiredString(\"controller\");
        if (string.Equals(action, \"users\", StringComparison.OrdinalIgnoreCase) &&
            string.Equals(controller, \"home\", StringComparison.OrdinalIgnoreCase))
        {
            // The action name is dynamic
            string actionName = \"Index\";
            requestContext.RouteData.Values[\"action\"] = actionName;
        }
        return new MvcHandler(requestContext);
    }
}
最后,将自定义路由处理程序与您的路由定义相关联:
routes.MapRoute(
    \"Default\",
    \"{controller}/{action}/{id}\",
    new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional }
).RouteHandler = new MyRouteHander();
现在,如果您请求
/home/users
,则将使用
Home
控制器的
Index
动作。     
        您可以只接受另一个路由参数并执行switch语句。     

要回复问题请先登录注册