Wat*_* v2 3 asp.net asp.net-mvc routing asp.net-routing asp.net-mvc-routing
我希望MVC应用程序具有.aspx页面URL,即使没有任何物理aspx页面,我将使用Razor视图引擎.
1)是否可以定义这样的路线?
2)如果我想要一个网址,例如下面给出的网址,那条路线会是什么样子:
http://example.com/controller/action.aspx
Run Code Online (Sandbox Code Playgroud)
并且可选地
http://example.com/controller/action.aspx/id
Run Code Online (Sandbox Code Playgroud)
并且可选地
http://example.com/controller/action.aspx?queryParam1=value&queryParam2=value
(等等...)
UPDATE
我意识到我想要这样的URL:
http://example.com/controller/id.aspx
Run Code Online (Sandbox Code Playgroud)
换句话说,我不希望指定具体的行动.默认操作将处理所有请求.
另一个更新
我在路由配置中指定的是:
routes.MapRoute(
name: "Default",
url: "{controller}/{id}.aspx",
defaults: new { controller = "Foo", action = "Index", id = "default" }
);
Run Code Online (Sandbox Code Playgroud)
但是,虽然上述路线适用于指定了Id的Url,如下所示:
http://example.com/foo/bar.aspx
Run Code Online (Sandbox Code Playgroud)
没有指定Id时它不起作用,例如下面的情况:
http://example.com/foo/
Run Code Online (Sandbox Code Playgroud)
如果它应该影响所有路由,您可以将默认路由更改为如下所示:
routes.MapRoute(
"Default",
"{controller}/{action}.aspx/{id}",
new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
如果你只想要它用于特定的路线,那么你可以添加一个像上面那样的路线,但是使用另一个路线,而不是Default
保留默认路线.然后,您可以在需要时通过其名称使用新的路由模式.
更新:
我没有试过这个,所以我不确定,但这是我会尝试的:
routes.MapRoute(
"Default",
"{controller}/{id}.aspx",
new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
您必须修改action-parameter的默认值,以便它匹配您的操作.
另一个更新:
为了解决这个问题,我相信你必须有两条路线.第一个路由应该需要ID并且不指定默认ID.如果该路线不匹配,如第二个例子,我们将落到第二条路线:
routes.MapRoute(
"DefaultWithId",
"{controller}/{id}.aspx",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
"Default",
"{controller}/",
new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
重要的是,最具体的路线首先出现,然后您回到越来越少的特定路线,因为您的路线将被自上而下读取,并且一旦找到匹配,将使用该路线.
归档时间: |
|
查看次数: |
2099 次 |
最近记录: |