3

我希望 MVC 应用程序具有 .aspx 页面 URL,即使没有任何物理 aspx 页面,并且我将使用 Razor 视图引擎。

1)是否可以定义这样的路线?

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

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

并且可以选择

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(
name: "Default",
url: "{controller}/{id}.aspx",
defaults: new { controller = "Foo", action = "Index", id = "default" }
);

但是,虽然上述路线确实适用于指定 Id 的 Url,例如以下:

http://example.com/foo/bar.aspx

当没有指定 Id 时,它不起作用,例如以下情况:

http://example.com/foo/
4

1 回答 1

5

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

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

如果您只希望它用于特定路线,那么您可以添加一个像上面那样的附加路线,但名称比Default, 并保持默认路由不变。然后,您可以在需要时通过其名称使用新的路由模式。

更新:

我没有尝试过,所以我不确定,但这是我会尝试的:

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

您必须修改动作参数的默认值,使其与您的动作匹配。

另一个更新:

为了处理这个问题,我相信你必须有两条路线。第一个路由应该需要一个 ID 并且不指定默认 ID。如果该路线不匹配,就像在您的第二个示例中一样,我们将落入第二条路线:

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

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

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

于 2013-01-28T12:21:39.240 回答