Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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路由参数根本不起作用_C#_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

C# MVC路由参数根本不起作用

C# MVC路由参数根本不起作用,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,我一直在寻找解决方案,但即使是最简单的例子也无法正常工作。传递单个参数{id}成功,但这是唯一有效的参数。将单个参数更改为任何其他参数都会失败。在下面的示例中,多个参数也会失败。似乎唯一可行的参数是“id” url localhost/Test/Monster/hi成功地将参数读取为“hi”。指定localhost/Test/Monster/hi/hello失败,并给出一个404。很抱歉,正如您所说 localhost/Test/Monster/Hi 工作意味着只配置了一个参数路由。。。当路由在

我一直在寻找解决方案,但即使是最简单的例子也无法正常工作。传递单个参数{id}成功,但这是唯一有效的参数。将单个参数更改为任何其他参数都会失败。在下面的示例中,多个参数也会失败。似乎唯一可行的参数是“id”


url localhost/Test/Monster/hi成功地将参数读取为“hi”。指定localhost/Test/Monster/hi/hello失败,并给出一个404。

很抱歉,正如您所说

localhost/Test/Monster/Hi

工作意味着只配置了一个参数路由。。。当路由在第一次调用时加载并且仅加载一次时,您是否尝试重新启动IISExpress

更改路由后,您必须从图标托盘中停止IIS Express并重新运行您的项目,然后使用一个参数,它将抛出错误。。由于您尚未设置这些选项,因此仅当您同时指定这两个参数时,该选项才会起作用。

请尝试以下操作:

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

        routes.MapRoute(
          name: "Servers",
          url: "{controller}/{action}/{id}/{a}",
          defaults: new
          {
            controller = "Test",
            id = UrlParameter.Optional,
            a = UrlParameter.Optional 
          }
        );
    }
还有,这是你唯一的路线吗?

路由设置的顺序很重要,很容易用后面的路由覆盖路由。我犯过无数次这样的错误。

如果操作不是可选的,您应该指定它的默认值。请尝试:

routes.MapRoute(
          name: "Servers",
          url: "{controller}/{action}/{id}/{a}",
          defaults: new
          {
            controller = "Test",
            action = "Monster"
          }
        );

在您的方法中,您已经指定了参数字符串a,因此当您传递URl localhost/Test/Monster/hi/hello时,MVC将在URl中查找参数a,因为它将表单post参数与函数中的参数相匹配

所以这个链接可能会像帮助我一样帮助你


这是一个非常晚的响应,但问题是下游有一个区域正在注册,这导致了路由问题。正在注册的区域有一个可选的url参数,该参数正在接管路由。使用此注册区域修复了问题。

很抱歉,正如您所说的localhost/Test/Monster/Hi working意味着只配置了一个参数路由。。。你有没有试过在第一次通话中加载路由时重新启动IISExpress。。更改路由后,您必须从图标栏停止IIS Express并重新运行您的项目,然后使用一个参数它应该会引发错误,因为您没有设置这些选项,只有在指定两个参数时它才会工作。我认为这里还发生了其他情况。你有没有可能在某处上传一个完整的项目?其他需要检查的是您的IIS配置,并确保您已重新编译。哦,我之所以这么说是因为只有id的请求不应该工作,因为a没有标记为可选。@IanNewson没有必要将id标记为可选。@IanNewson我想您对这里发生的其他事情是正确的。我现在将研究可能的配置问题。重新启动服务器对其没有任何影响。如果某个参数正常工作,则表示路由无效。。意味着它没有连接到服务器。由于您没有将参数指定为可选参数,因此,如果您不传递第二个参数,则会出现错误。它只能同时使用两个参数,您的情况不能说明,但这是它的工作方式。在重新启动和重新运行项目之前,还需要进行适当的编译。这是不正确的。路由参数为
string
,可为空
Test/Monster
表示
id
a
的值为空,
Test/Monster/hi
表示
id
的值为“hi”,而
a
的值为空
Test/Monster/hi/hello
表示id的值为“hi”,而
a
的值为“hello”。@StephenMuecke right。。!!谢谢你让我改正。。对,它们都是空的。。我承认我的错误。这是唯一的途径,我相信这是一个外部问题。我也尝试了您的更改,但尚未达成解决方案。非常感谢您的帮助。只有最后一个参数可以是可选的,但在任何情况下,参数都是类型为
string
,可以为null,因此
UrlParameter。可选的
是不必要的(它们都是“有效的”可选的-如果不提供,它们将为
null
routes.MapRoute(
          name: "Servers",
          url: "{controller}/{action}/{id}/{a}",
          defaults: new
          {
            controller = "Test",
            action = "Monster"
          }
        );