Маршрутизация на основе Attirbute для ASP.Net контроллер

Я знаю, что маршрутизация на основе атрибутов работает на уровне действия, но могу ли я использовать то же самое на уровне контроллера для следующего сценария?

У меня есть контроллер с именемC1Controller, но я хочу, когда url содержит C1Или C2Или C3затем C1Controllerвызвать. Как использовать Routeатрибут для достижения этого?

2 ответа

  1. Получил ответ с поста

    «Наиболее правильным способом было бы создать класс, наследующий атрибут ActionFilterAttribute и переопределяющий метод OnActionExecuting. Это может быть зарегистрировано в GlobalFilters в Global.asax.цезий»

    Нравится:

    public class InspectActionFilter : ActionFilterAttribute
    {
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
           //Check URL for c1, c2 ... and redirect if found
       }
    }
    

    Чтобы использовать его, просто добавьте его в глобальные фильтры в global.asax:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new LogActionFilter());
    }
    

    Ref: перехват всех вызовов

    ASP.NET MVC 4 перехватывать все входящие запросы

    Надеюсь, это поможет!

  2. Попробуйте этот

    public class TheActionFilter: ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            if (controllerName !="C1" || controllerName !="C1" || controllerName !="C3")
                 return;
            var redirectTarget = new RouteValueDictionary
               {{"action", "ActionName"}, {"controller", "ControllerName"}};
            filterContext.Result = new RedirectToRouteResult(redirectTarget);      
            filterContext = new RedirectResult(filterContext.HttpContext.Request.UrlReferrer.AbsolutePath)              // The session you can get from the context like that:
            var session = filterContext.HttpContext.Session;
        }
    }
    

    в контроллере

    [TheActionFilter]
    public class BookController : Controller
    {
        // Your Action Results
    }