Asp.net mvc 如何控制ASP.NET MVC中使用的操作
我有一个设置,其中我使用一个路由,url的格式如下: www.example.com/friendly-url-1 www.example.com/friendly-url-2 www.example.com/other-friendly-url 路线定义如下:Asp.net mvc 如何控制ASP.NET MVC中使用的操作,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我有一个设置,其中我使用一个路由,url的格式如下: www.example.com/friendly-url-1 www.example.com/friendly-url-2 www.example.com/other-friendly-url 路线定义如下: routes.MapRoute("FriendlyUrl", "{name}", new { controller = "FriendlyUrl", action = "Index", name = UrlPa
routes.MapRoute("FriendlyUrl", "{name}",
new { controller = "FriendlyUrl", action = "Index", name = UrlParameter.Optional }
);
Name是我的应用程序中的一个内部属性,它允许我查找自定义ControllerFactory中应使用的控制器,并更改所创建控制器的名称(没有名为FriendlyUrl的实际控制器)
如果每个控制器只有一个操作,那么它工作得很好,但是因为操作不是路由的一部分,所以它总是使用默认操作。我希望有多个操作,但我无法找到一个好方法来编写逻辑,控制每个请求应该使用哪个操作。有可能吗?您可以为您的URL编写专用路由,在这种情况下,它将调用不同的操作。但是如果你想使用一个表达式来路由到不同的动作,我不认为你可以直接通过在routeConfig中写入route来实现,因为你需要在某个地方指定URL段到动作的映射,这相当于在routeConfig中创建专用的路由“www.example.com/friendly url/name”并希望
name
确定控制器和操作,例如
- “example.com/friendly/foo”将解析为
和SomeController
XxxAction
- “example.com/friendly/boo”将解析为另一个控制器
public class MyRouteHander : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var values = requestContext.RouteData.Values;
var token = GetRequestToken(requestContext);
switch (token) {
case "friendly/foo") {
values["controller"] = "some";
values["action"] = "xxx";
break;
case "friendly/boo") {
values["controller"] = "another";
values["action"] = "zzz";
break;
...
}
return new MvcHandler(requestContext);
}
}
然后将处理程序注册到
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new MyRouteHander();
您必须在URL中指定要调用的操作。它将始终调用默认操作是有意义的,因为在您的路由中没有其他信息可用于调用特定操作。只有一个URL段:名称。这是我的系统中的一个值,使我能够找到正确的控制器和操作。我无法为每个页面(名称)创建单独的路由,因为一个站点可以包含数百万个页面。在同一侧,每种类型的url也将调用相同的操作