将URL段重定向到MVC Controller的正确方法

时间:2015-05-14 20:06:23

标签: asp.net-mvc redirect

我有一个现有的控制器

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重定向到此Controller Action。什么是最好的方法来做到这一点。我尝试在Global.aspx中检查Session_Start中的RequestUrl,但重定向似乎没有发生。我想到的另一种选择是使用不同的控制器,如“ScorecardController”,然后在Index视图中使用RedirectToAction(“Scorecard”,“Home”)。

2 个答案:

答案 0 :(得分:0)

RedirectToAction是更好的方法,因为如果您稍后更改路由表,重定向网址将会被调整。

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;

答案 1 :(得分:0)

您可以在App_Start文件夹中添加FilterAccess类,以执行以下操作:

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");
        }
  }
}