2015-05-14 89 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重定向到此控制器操作。什麼是最好的辦法來做到這一點。我嘗試檢查Global.aspx中的Session_Start中的RequestUrl,但重定向似乎沒有發生。我想到的另一種選擇是使用不同的控制器,如「ScorecardController」,然後在Index視圖中使用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;

相關問題