如何在MVC中使用短网址

时间:2016-09-07 13:43:07

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing url-routing

包含产品类别的短网址,例如

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 }

如何解决这个问题?

1 个答案:

答案 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 }
            );