我有两个途径Asp.Net路由会被重定向URL,如果参数没有定义
主页routes.MapRoute(
name: "Default",
url: "{location}/{controller}/{action}/{id}",
defaults: new { controller = "Products", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Home",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
当用户进入主页面,他已经选择了两个环节:
<a href="/loc1/Products/index">Location 1</a>
<a href="/loc2/Products/index">Location 2</a>
而且我有ActionFilterAttribute
,我在那里检查location
参数,如果url没有,我将用户重定向到主页面。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string location = (string)filterContext.RouteData.Values["location"];
if (string.IsNullOrEmpty(location)
&& filterContext.ActionDescriptor.ControllerDescriptor.ControllerName != "Home"
&& !filterContext.IsChildAction)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "Home" },
{ "action", "Index" }
});
}
SessionUtils.SetLocationName(location);
}
基础上location
可变我会查询数据库中不同的记录,所以当用户没有提供网址的任何位置,并尝试访问Products/index/5
我希望他们被重定向到他们的主页选择位置并单击其中一个链接。 但是,我收到错误消息:
无法找到该资源。
说明:HTTP 404。您正在寻找(或它的一个依赖)的资源可能已被删除,更名或暂时不可用。请检查以下网址并确保它拼写正确。
请求的URL:/产品/指数
我应该如何正确地进行路由配置,让用户将被重定向到主页如果网址中没有位置参数?
如果我不想依赖'loc1'和'loc2'会怎么样?实际的“位置”将从数据库中拉出,HTML将自动渲染。 –
编辑符合您需要的答案 – manish