Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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
C# MVC 5路由问题ActionResult根_C#_Asp.net Mvc 5 - Fatal编程技术网

C# MVC 5路由问题ActionResult根

C# MVC 5路由问题ActionResult根,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我对MVC中的路由有疑问 我创建了一个简单的网站,我定义了一个名为HomeController.cs public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{i

我对MVC中的路由有疑问 我创建了一个简单的网站,我定义了一个名为
HomeController.cs

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 }
    );
}
已定义my
public ActionResult网页(int id)
id是我正在显示的页面的id。我的路线将类似于:

当前:

http://localhost:5000/Home/WebPage/1
http://localhost:5000/1
我想要的是:

http://localhost:5000/Home/WebPage/1
http://localhost:5000/1
我当前的
RouteConfig.cs

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 }
    );
}
我试过在
RouteConfig.cs
中分配不同的路线,但我卡住了,有人能给我指出正确的方向吗


我在StackOverflow上搜索了与此类似的内容,但没有找到。

如果对
id
值应用约束,Felipe的建议将起作用

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "WebPage",
            url: "{id}",
            defaults: new { controller = "Home", action = "WebPage" },
            constraints: new { id = @"\d+" });

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

您应该尝试路由属性,它可能会对您有所帮助

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

  **routes.MapMvcAttributeRoutes();**

 routes.MapRoute(
    name: “Default”,
    url: “{controller}/{action}/{id}”,
    defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional });
}
像这样使用属性

  [Route(“{id:int}”)]
  public ActionResult WebPage(int id) { … }

答案

在我的控制器中:
[RoutePrefix(“”)
和我的方法网页
[Route({id?}”)]

RouteConfig.cs

 public class RouteConfig
 {
     public static void RegisterRoutes(RouteCollection routes)
     {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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

也许,将您的操作定义为
public ActionResult WebPage(int-id)
,并添加一个根路由:
routes.MapRoute(名称:“root”,url:{id}),默认值:new{controller=“Home”,action=“WebPage”})你不能(除非你要创建一个路由约束,因此如果路由值是
int
它将使用该方法),你需要一些东西来唯一地标识你的路由。在这里找到我的Answere!如果id是字符串值怎么办?约束不满足,因此应用程序将尝试匹配下一个路线图,在本例中为
默认值
。例如,给定URL
http://hostname/x
,默认映射实际上匹配,因此应用程序将尝试执行
XController
索引
操作。