如果用户直接访问区域根URL(\ Products),我希望将用户路由到网站主页(\ Home)。 RegisterArea route.map中的正确编码是什么?
以下是项目中的文件夹结构以及它们如何映射到网站
/ Area / Products - > /产品
/查看/主页 - > /主页
如果用户转到/,则转到/ Home(使用控制器主页的索引操作)
如果用户访问/ Products,则转到/ Home(使用控制器主页的索引操作)
如果用户转到/ Products / Fruit,则使用控制器Fruit的索引操作; /产品/水果
我有一个标准 RouteConfig
public static void RegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我在global.asax.cs文件中有一个标准条目
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
这是我更新的区域注册路线
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Product_default",
"Product/{controller}/{action}/{id}",
new {
area = "",
controller = "Home",
action = "Index",
id = UrlParameter.Optional });
}
如果我转到\ Products,我会收到错误消息
无法找到资源。
描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
请求的网址:/ products /
有些人可能在黑客中考虑的两个可能的解决方案是:
在区域中创建一个控制器,为该控制器分配默认值并将索引操作重定向回家庭控制器
在Global.asax.cs文件中注册301重定向/ products
答案 0 :(得分:0)
ProductAreaRegistration配置为默认为控制器,该控制器将重定向到网站根目录上的Home控制器(area =“”)。
ProductAreaRegistration
public class ProductAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Product";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Product_default",
"Product/{controller}/{action}/{id}",
defaults: new { controller="Redirect", action = "Index", id = UrlParameter.Optional });
}
}
控制器
public class RedirectController : Controller
{
// GET: Product/Redirect
public ActionResult Index()
{
return RedirectToAction("Index","Home",new { area = "" });
}
}