2015-05-14 2 views
1

У меня есть существующий контроллерправый путь Перенаправление сегмент URL в MVC контроллер

public class HomeController : Controller 
{ 


    public ActionResult Index() 
    { 
     return Redirect("/Scorecard"); 

    } 

    [OutputCache(Duration = 18000)] 
    public ActionResult Scorecard() 
    { 
     return View(); 
    } 
} 

Это в настоящее время Карты для http://siteurl/Home/Scorecard. Я хотел, чтобы сегмент http://siteurl/scorecard перенаправлялся на это действие контроллера. Каким был бы лучший способ сделать это. Я попытался проверить RequestUrl в Session_Start в Global.aspx, но перенаправления, похоже, не происходят. Другая альтернатива, о которой я думал, - это использовать другой контроллер, такой как «ScorecardController», а затем иметь в нем представление RedirectToAction («Scorecard», «Home»).

ответ

0

можно добавить класс FilterAccess на вашу папку App_Start, чтобы сделать что-то вроде этого:

public class FilterAcess : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
     //Redirect 
     if (HttpContext.Current.Request.Url=="http://siteurl/scorecard"){ 
      context.HttpContext.Response.Redirect("~/Home/Scorecard"); 
     } 
    } 
} 
0

RedirectToAction - лучший способ сделать это, потому что, если вы измените таблицу маршрутизации позже, URL-адрес перенаправления будет адаптирован.

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Scorecard"); 
    } 

    [OutputCache(Duration = 18000)] 
    public ActionResult Scorecard() 
    { 
     return View(); 
    } 
} 

Вы должны также обновить RouteTable с дополнительным маршрутом, перед «по умолчанию» маршруту:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.LowercaseUrls = true; 

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "NoHomeSegmentInUrl", 
     url: "{action}/{id}", 
     defaults: new { controller = "Home", id = UrlParameter.Optional }); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

И, для строчных маршрутов, которые необходимо выровнять routes.LowercaseUrls = true;

Смежные вопросы