具有任意数量的键值对的ASP.NET路由 – 是否可能?
发布时间:2020-12-16 06:26:50 所属栏目:asp.Net 来源:网络整理
导读:我想处理这样的网址: /Id/Key1/Value1/Key2/Value2/Key3/Value3/ 现在,我已经建立了这样的规则: /{id}/{*parameters} 参数对象作为单个字符串传递给形成响应所涉及的所有操作.这确实有效,但我遇到了一些问题: 每个操作都必须为自己解析字符串.当然,我已经
我想处理这样的网址:
/Id/Key1/Value1/Key2/Value2/Key3/Value3/ 现在,我已经建立了这样的规则: /{id}/{*parameters} 参数对象作为单个字符串传递给形成响应所涉及的所有操作.这确实有效,但我遇到了一些问题: >每个操作都必须为自己解析字符串.当然,我已经制作了一个扩展方法,将字符串转换为字典< string,string>,但如果调度机制为我的方法提供了一个字典< string,我更喜欢它.直接 – 或者更好的是,实际的对作为单独的参数. 有没有办法做到这一点? 解决方法
你可以写一个自定义路线:
public class MyRoute : Route { public MyRoute() : base( "{controller}/{action}/id/{*parameters}",new MvcRouteHandler() ) { } public override RouteData GetRouteData(HttpContextBase httpContext) { var rd = base.GetRouteData(httpContext); if (rd == null) { return null; } string parameters = rd.GetRequiredString("parameters"); IDictionary<string,string> parsedParameters = YourExtensionMethodThatYouAlreadyWrote(parameters); rd.Values["parameters"] = parsedParameters; return rd; } public override VirtualPathData GetVirtualPath(RequestContext requestContext,RouteValueDictionary values) { object parameters; if (values.TryGetValue("parameters",out parameters)) { var routeParameters = parameters as IDictionary<string,object>; if (routeParameters != null) { string result = string.Join( "/",routeParameters.Select(x => string.Concat(x.Key,"/",x.Value)) ); values["parameters"] = result; } } return base.GetVirtualPath(requestContext,values); } } 可以这样注册: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.Add("my-route",new MyRoute()); routes.MapRoute( "Default","{controller}/{action}/{id}",new { controller = "Home",action = "Index",id = UrlParameter.Optional } ); } 现在您的控制器操作可以采用以下参数: public ActionResult SomeAction(IDictionary<string,string> parameters) { ... } 就产生这种模式的链接而言,它很简单: @Html.RouteLink( "Go","my-route",new { controller = "Foo",action = "Bar",parameters = new RouteValueDictionary(new { key1 = "value1",key2 = "value2",}) } ) 或者如果你想要< form>: @using (Html.BeginRouteForm("my-route",new { controller = "Foo",parameters = new RouteValueDictionary(new { key1 = "value1",key2 = "value2" }) })) { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 可以在运行时更改数据注释吗? (ASP.NET MV
- asp.net-mvc – MVC帖子没有填充模型
- asp.net-mvc – 具有SelectList(s)最佳实践的ASP.NET MVC V
- asp.net-mvc – ASP.NET MVC – 为基本控制器中的母版页设置
- asp.net-mvc – ASP.NET MVC向最终用户显示操作成功
- 如何在ASP.NET MVC中获得HttpResponse的引用?
- asp.net – Web api界面在本地工作,但不在Azure上
- asp.net-mvc – Gzip压缩无法运行ASP.net MVC5
- asp.net-mvc – 在JS函数中使用T4MVC
- asp.net – GridView不记得回发之间的状态
推荐文章
站长推荐
- asp.net – 配置转换和“TransformXml任务失败”
- asp.net-mvc – TextBoxFor中限制为2位小数
- asp.net-mvc – Elmah.Mvc 2.0自定义身份验证
- asp.net – 如何为Katana/Owin自主托管应用程序设
- asp.net – 使用ARR的IIS反向代理与目录级别有问
- asp.net-mvc-2 – ASP.NET MVC:如何解析url字符
- asp.net-mvc-2 – 什么是Html.Validate和Html.Va
- asp.net-mvc – 向MVC ModelMetadata添加新属性
- 在ASP.NET中,获取基本UR1请求的最快方法是什么?
- asp.net-mvc – MVC.net获取枚举显示名称而不必参
热点阅读