asp.net-mvc – ASP.net MVC自定义路由处理程序/约束
|
我需要使用下面的url实现一个MVC网站: > category1 / product / 1 / wiki 匹配标准是url以“wiki”结尾. 不幸的是,下面的catch-all仅在URL的最后一部分工作: routes.MapRoute("page1",// Route name
"{*path}/wiki",// URL with parameters
new { controller = "Wiki",action = "page",version = "" } // Parameter defaults
我没有时间通过MVC可扩展性选项,所以我想知道实现这个可能的选择是什么?任何样品/样品将是太棒了! 解决方法如上所述,catch-all参数只能出现在路由的末尾 – 如果您尝试运行应用程序,则您发布的代码会导致运行时错误,并给您黄色的死亡屏幕.构建自定义路由场景有几个可扩展点.这些是 – Route,RouteBase和IRouteHandler. 您可以通过扩展RouteBase来创建要处理的生成的路由列表.通常,您将遵循拥有一个构造函数的模式,该构造函数接收一个资源(控制器名称),然后分配一个它负责的路由列表,然后将其映射到global.asax中.以下是一些您可以从中构建的示例代码: public class MyRoute : RouteBase
{
private List<Route> _routes = new List<Route>();
public MyRoute(string resource)
{
// make a Resource property,not shown in this example
this.Resource = resource;
// Generate all your routes here
_routes.Add(
new Route("some/url/{param1}",new McvRouteHandler {
Defaults = new RouteValueDictionary(new {
controller = resource,action = actionName
}),Constraints = new RouteValueDictionary()
);
_routes.Add(...); // another new route
}
public override RouteData GetRouteData(HttpContextBase context)
{
foreach (var route in _routes)
{
var data = route.GetRouteData(context);
if (data != null)
{
return data;
}
}
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext context,RouteValueDictionary rvd)
{
foreach (var route in _routes)
{
var path = route.GetVirtualPath(context,rvd);
if (path != null)
{
return path;
}
}
return null;
}
}
要使用您的路由类,请执行routes.Add(new MyRoute(“page1”));在你的Global.asax. 如果需要更多的控制,可以实现一个IRouteHandler,而不是为您的路由创建MvcRouteHandlers(),如上例所示,请使用您自己的IRouteHandler.这将允许您覆盖从请求数据中选择控制器的逻辑. 整个框架是非常可扩展的,但您需要学习相当多的一些才能正确执行.我建议您尽可能地重新排列您的URL,以便您可以利用catch-all参数. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 我可以同时拥有Controller和ApiController吗?
- asp.net – WebForms中的Tabbing行为
- asp.net-core – 如何使用.net Core设置离线开发
- ASP.NET WSAT(网站管理工具)和自定义成员资格提供程序
- asp.net结合Ajax验证用户名是否存在的代码
- asp.net – 以纯文本识别URL
- 停止代码构建器转义单引号ASP.NET MVC 2
- asp.net-mvc – 部署后不显示捆绑的css … ASP.NET MVC4
- asp.net – %%和%=%之间有什么区别?
- asp.net-mvc – ASP.NET MVC Web API缓存控制头部没有发送响
