У меня есть UserAccountController, который принимает маршруты, подобные этому "/{username}/{action}"
.
Я хотел бы создать некоторые функции, чтобы я мог перевести пользователя на страницу, относящуюся к учетной записи, не зная заранее его имени пользователя.Я хотел бы иметь возможность использовать URL "/your/{action}"
, который уловил бы тот факт, что "ваше" было отправлено в качестве их имени пользователя, получило их реальное имя пользователя (потому что они вошли в систему) и перенаправило их на "/ их-фактический-username / {action} ".
Я мог бы сделать это в каждом из действий контроллера, но я бы предпочел, чтобы это произошло в каком-то месте ранее, которое бы делало это для всех действий контроллера.Я попытался сделать это в методе контроллера Initialize
, изменив RouteData.Values["username"]
на реальное имя пользователя, а затем попытавшись Response.RedirectToRoute(RouteData); Response.End()
, но это всегда приводило меня в неправильное место (какой-то совершенно неправильный маршрут).
Обновлено: Спасибо BuildStarted за подсказку:
public class UserAccountController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if ((string) filterContext.RouteData.Values["username"] != "your")
return;
var routeValues = new RouteValueDictionary(filterContext.RouteData.Values);
routeValues["username"] = UserSession.Current.User.Username;
filterContext.Result = new RedirectToRouteResult(routeValues);
}
}