2015-05-14 87 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;

相关问题