包含产品类别的短网址,例如
http://example.com/Computers
应该在ASP.NET MVC 4购物车中使用。 如果没有控制器,则应调用带有id参数作为计算机的Home Index方法。
我尝试使用
将id参数添加到家庭控制器public class HomeController : MyControllerBase
{
public ActionResult Index(string id)
{
if (!string.IsNullOrWhiteSpace(id))
{
return RedirectToAction("Browse", "Store", new
{
id = id,
});
}
return View("Index", new HomeIndexViewModel());
}
但http://example.com/Computers导致404错误
' /'中的服务器错误应用
无法找到资源。
描述:HTTP 404.您正在寻找的资源(或其中一个 依赖项)可能已被删除,其名称已更改,或者是 暂时不可用。请查看以下网址并制作 确保它拼写正确。
请求的网址:/ Computers
版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.6.1073.0
如果在http://example.com/....
使用MVC默认路由:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
看起来MVC忽略了路由参数:
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
如何解决这个问题?
答案 0 :(得分:0)
你的问题是因为aspnet mvc试图找到名为Computers的控制器,而你的控制器是Home,你可以在名称为Default的路由之前添加这样的新路由:
routes.MapRoute(
name: "Computers",
url: "Computers",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在上述情况下,您正在创建一个与网址http://domain.com/Computers匹配的路由,此路由将由HomeController管理。
另外,根据您的评论,您可以使用以下路线:
routes.MapRoute(
name: "Default",
url: "{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);