Asp.net mvc Asp.Net MVC-最佳的“解决方案”;“动态”;路由
我试图想出一种方法来创建“动态”路由。确切地说,我的意思是,我希望能够为每次点击分配控制器和路线操作,而不是直接将其映射 例如,路由可能看起来像“path/{object}”,当点击该路径时,将执行查找,提供要调用的适当控制器/操作 我已经尝试过发现创建自定义路由处理程序的机制,但是文档/可发现性目前有点可疑(我知道,它是beta版的,我不会再期待了)。尽管如此,我不确定这是否是最好的方法,也许控制器工厂或执行所有映射的默认控制器/操作可能是最好的方法(没有双关语)Asp.net mvc Asp.Net MVC-最佳的“解决方案”;“动态”;路由,asp.net-mvc,routing,routes,Asp.net Mvc,Routing,Routes,我试图想出一种方法来创建“动态”路由。确切地说,我的意思是,我希望能够为每次点击分配控制器和路线操作,而不是直接将其映射 例如,路由可能看起来像“path/{object}”,当点击该路径时,将执行查找,提供要调用的适当控制器/操作 我已经尝试过发现创建自定义路由处理程序的机制,但是文档/可发现性目前有点可疑(我知道,它是beta版的,我不会再期待了)。尽管如此,我不确定这是否是最好的方法,也许控制器工厂或执行所有映射的默认控制器/操作可能是最好的方法(没有双关语) 如有任何建议,将不胜感激 您
如有任何建议,将不胜感激 您始终可以使用“一网打尽”的语法(我不知道名称是否正确) 路线:
routeTable.MapRoute(
“路径”,
“{*path}”,
新建{controller=“Pages”,action=“Path”})代码>
控制器动作定义为:
公共操作结果路径(字符串路径)
在控制器的操作中,您将拥有一条路径,因此只需将其拆分并分析即可
要调用另一个控制器,可以使用RedirectToAction(我认为这是更合适的方法)。通过重定向,您可以为其设置永久重定向。
或者使用类似的方法:
internal class MVCTransferResult : RedirectResult
{
public MVCTransferResult(string url) : base(url)
{
}
public MVCTransferResult(object routeValues)
: base(GetRouteURL(routeValues))
{
}
private static string GetRouteURL(object routeValues)
{
UrlHelper url = new UrlHelper(
new RequestContext(
new HttpContextWrapper(HttpContext.Current),
new RouteData()),
RouteTable.Routes);
return url.RouteUrl(routeValues);
}
public override void ExecuteResult(ControllerContext context)
{
var httpContext = HttpContext.Current;
// ASP.NET MVC 3.0
if (context.Controller.TempData != null &&
context.Controller.TempData.Count() > 0)
{
throw new ApplicationException(
"TempData won't work with Server.TransferRequest!");
}
// change to false to pass query string parameters
// if you have already processed them
httpContext.Server.TransferRequest(Url, true);
// ASP.NET MVC 2.0
//httpContext.RewritePath(Url, false);
//IHttpHandler httpHandler = new MvcHttpHandler();
//httpHandler.ProcessRequest(HttpContext.Current);
}
}
但是,此方法需要在IIS或IIS Expres上运行。Casini不支持服务器。传输方法请参阅此小手册:,选项3部分-它描述了如何构建自定义请求处理链。您知道为什么我们需要在调用TransferRequest之前检查TempData中的数据吗?