我有一个现有的控制器
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”)。
答案 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");
}
}
}