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路由:如何创建我的MVC URL';s有.aspx分机吗?_Asp.net_Asp.net Mvc_Routing_Asp.net Mvc Routing_Asp.net Routing - Fatal编程技术网

ASP.NET MVC路由:如何创建我的MVC URL';s有.aspx分机吗?

ASP.NET MVC路由:如何创建我的MVC URL';s有.aspx分机吗?,asp.net,asp.net-mvc,routing,asp.net-mvc-routing,asp.net-routing,Asp.net,Asp.net Mvc,Routing,Asp.net Mvc Routing,Asp.net Routing,我希望MVC应用程序有.aspx页面URL,即使没有任何物理aspx页面,我也会使用Razor视图引擎 1) 有可能定义这样一条路线吗 2) 如果我想要一个url,比如下面给出的url,那么该路线会是什么样子的: http://example.com/controller/action.aspx 或者 http://example.com/controller/action.aspx/id 或者 http://example.com/controller/action.aspx/id ht

我希望MVC应用程序有.aspx页面URL,即使没有任何物理aspx页面,我也会使用Razor视图引擎

1) 有可能定义这样一条路线吗

2) 如果我想要一个url,比如下面给出的url,那么该路线会是什么样子的:

http://example.com/controller/action.aspx
或者

http://example.com/controller/action.aspx/id
或者

http://example.com/controller/action.aspx/id
http://example.com/controller/action.aspx?queryParam1=value&queryParam2=value
(等等…)

更新

我意识到我希望URL是这样的:

http://example.com/controller/id.aspx
routes.MapRoute(
    "Default",
    "{controller}/{action}.aspx/{id}",
    new { controller = "Home", action = "Index" }
);
换句话说,我不希望指定具体的操作。默认操作将处理所有请求

另一次更新

我在路由配置中指定的是:

routes.MapRoute(
name: "Default",
url: "{controller}/{id}.aspx",
defaults: new { controller = "Foo", action = "Index", id = "default" }
);
然而,尽管上述路由确实适用于指定Id的Url,例如下面的Url:

http://example.com/foo/bar.aspx
当未指定Id时,它不起作用,例如在以下情况下:

http://example.com/foo/

如果它会影响所有路由,您可以将默认路由更改为如下所示:

http://example.com/controller/id.aspx
routes.MapRoute(
    "Default",
    "{controller}/{action}.aspx/{id}",
    new { controller = "Home", action = "Index" }
);
如果您只想将其用于特定的路由,则可以添加一个类似于上述路由的附加路由,但其名称不是
Default
,并保持默认路由不变。然后,您可以在需要时通过其名称使用新的路由模式

更新:

我还没有尝试过这个,所以我不确定,但这就是我要尝试的:

routes.MapRoute(
    "Default",
    "{controller}/{id}.aspx",
    new { controller = "Home", action = "Index" }
);
您必须修改action参数的默认值,以便它与您的操作的类型匹配

另一个更新:

要解决这个问题,我相信你必须有两条路线。第一个路由应该需要一个ID,并且不指定默认ID。如果该路由不匹配,如第二个示例中所示,我们将使用第二个路由:

routes.MapRoute(
    "DefaultWithId",
    "{controller}/{id}.aspx",
    new { controller = "Home", action = "Index" }
);

routes.MapRoute(
    "Default",
    "{controller}/",
    new { controller = "Home", action = "Index" }
);

重要的是,最具体的路线首先出现,然后再退回到越来越不具体的路线,因为您的路线将被自上而下地读取,一旦找到匹配项,就会使用该路线。

谢谢。再过9分钟,我会把你的答案记为正确答案。:-)@很高兴它起了作用!我把问题改了一点。我意识到我想要另一种。请复习,我就是这么做的。当我指定默认操作时,它不起作用。请查看我的更新到我的更新。:-)@水冷器不用担心,简单的解决方案通常(讽刺地)也是最容易被忽视的。