Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 尝试www.example.com/id时出现MVC路由问题_Asp.net Mvc_Asp.net Mvc 5_Routes - Fatal编程技术网

Asp.net mvc 尝试www.example.com/id时出现MVC路由问题

Asp.net mvc 尝试www.example.com/id时出现MVC路由问题,asp.net-mvc,asp.net-mvc-5,routes,Asp.net Mvc,Asp.net Mvc 5,Routes,假设我有一个网站www.example.com 默认路由如下所示 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional } ); 好的,这很好,但假设我想在进入www.example.com/id时进入www.example

假设我有一个网站
www.example.com

默认路由如下所示

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
好的,这很好,但假设我想在进入
www.example.com/id
时进入
www.example.com/login/index/id

我如何配置/添加此路由,而不中断我实际尝试转到
www.example.com/controller
的其他页面

编辑:不幸的是,id是一个字符串,所以我没有任何具体的约束条件,我认为这是可行的。想一想,也许我应该说companyname或sitename,而不是id,这样URL看起来像www.example.com/companyname

到目前为止,我提出的唯一解决方案是为我的每个控制器添加一个maproute,如下所示

 routes.MapRoute(
        name: "Home",
        url: "Home/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

 routes.MapRoute(
        name: "Settings",
        url: "Settings/{action}/{id}",
        defaults: new { controller = "Settings", action = "Index", id = UrlParameter.Optional }
    );

 routes.MapRoute(
        name: "companyname",
        url: "{id}",
        defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
    );

   routes.MapRoute(
        name: "default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
    );

这将起作用,但我有许多控制器,如果我在未来添加一个,而忘记调整路由,它将失败。同样,这不太可能,但是如果一个companyname恰好与我的一个控制器名称相同,它也会失败

在控制器中,您可以重定向到另一个控制器/操作:

public ActionResult yourAction()
{
  return  RedirectToAction("nameAction","nameController");
}

在控制器中,您可以重定向到另一个控制器/操作:

public ActionResult yourAction()
{
  return  RedirectToAction("nameAction","nameController");
}

您是否先尝试添加此映射:

routes.MapRoute( name: "Custom", url: "{id}", defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional } );
这应该是可行的,但请记住,路由是经过独立评估的,因此您必须组织映射,以便访问站点中的所有页面

例如,像www.example.com/Product这样的路由可能会被错误地重定向到/Login

编辑:您可以添加约束,因此如果id是int值,您可以尝试以下操作:

 routes.MapRoute("Custom", "{id}",
                new { controller = "Login", action = "Index" },
                new { id = @"\d+" }
编辑2:将ID作为字符串值,我看到的唯一解决方案是按照您所说的手动添加每个控制器,或者添加如下内容:

routes.MapRoute(
name: "Default",
url: "app/{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
))


这样以后就不需要更新每条路线。

您是否先尝试添加此映射:

routes.MapRoute( name: "Custom", url: "{id}", defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional } );
这应该是可行的,但请记住,路由是经过独立评估的,因此您必须组织映射,以便访问站点中的所有页面

例如,像www.example.com/Product这样的路由可能会被错误地重定向到/Login

编辑:您可以添加约束,因此如果id是int值,您可以尝试以下操作:

 routes.MapRoute("Custom", "{id}",
                new { controller = "Login", action = "Index" },
                new { id = @"\d+" }
编辑2:将ID作为字符串值,我看到的唯一解决方案是按照您所说的手动添加每个控制器,或者添加如下内容:

routes.MapRoute(
name: "Default",
url: "app/{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
))


这样以后就不需要更新每条路线。

请尝试下面的路线

routes.MapRoute(name: "companylogin", url: "companylogin/{id}", defaults: new
        {
            controller = "Login",
            action = "Index",
            id = UrlParameter.Optional
        });

        routes.MapRoute(name: "default", url: "{controller}/{action}/{id}", defaults: new
        {
            controller = "Login",
            action = "Index",
            id = UrlParameter.Optional
        });
删除其他特定于控制器的路由。现在,您可以使用导航到登录
url:-www.example.com/companylogin/{id}和所有其他url重定向默认路由

请尝试下面的路由

routes.MapRoute(name: "companylogin", url: "companylogin/{id}", defaults: new
        {
            controller = "Login",
            action = "Index",
            id = UrlParameter.Optional
        });

        routes.MapRoute(name: "default", url: "{controller}/{action}/{id}", defaults: new
        {
            controller = "Login",
            action = "Index",
            id = UrlParameter.Optional
        });
删除其他特定于控制器的路由。现在,您可以使用导航到登录
url:-www.example.com/companylogin/{id}和所有其他url重定向默认路由

我确实尝试过,但正如您所说,这会导致我的其他控制器进入www.example.com/Product,然后进入我的登录控制器,而不是我的产品控制器。不幸的是,id是一个字符串。例如,它可以是companyname。我已经编辑了我的问题。也许你可以尝试使用动作过滤器,这样如果它是一个公司名称,你可以重定向到任何你需要的动作。请看,我确实尝试过,但正如您所说,这会导致我的其他控制器进入www.example.com/Product,然后进入我的登录控制器,而不是我的产品控制器。不幸的是,id是一个字符串。例如,它可以是companyname。我已经编辑了我的问题。也许你可以尝试使用动作过滤器,这样如果它是一个公司名称,你可以重定向到任何你需要的动作。看见