ASP.net上的URL路由,需要从url获取参数
发布时间:2020-12-16 07:03:56 所属栏目:asp.Net 来源:网络整理
导读:我正在开发asp.net应用程序的组功能. 我想让用户直接访问组,所以我想要网址 www.domain.com/groupname 我为这种情况实现了URL路由,但是我想将组名称传递给asp页面作为参数的问题,我该怎么做? 实际路径是“?/ Public / ViewGroup?group = groupnamegt ;,如
我正在开发asp.net应用程序的组功能.
我想让用户直接访问组,所以我想要网址 www.<domain>.com/<groupname> 我为这种情况实现了URL路由,但是我想将组名称传递给asp页面作为参数的问题,我该怎么做? 实际路径是“?/ Public / ViewGroup?group =< groupname> ;,如何获取此组名并将其添加到虚拟路径? 谢谢 解决方法
快速回答是使用:
routes.MapPageRoute( "groupname","{group}","~/public/viewgroup" ); 然后使用查询字符串来提取?/ public / viewgroup代码中的值,而不是(或同样),而是从RouteData中提取组名,如下所示. ControllerContext.RouteData.Values["groupname"]; 另一个选项是使用IIS重写模块. <rewrite> <rules> <rule name="groupname"> <match url="^([^/]*)$" /> <action type="Rewrite" url="public/viewgroup?group={R:1}" /> </rule> </rules> </rewrite> 如果你真的必须将值作为新的查询字符串值传递,并且想要使用路由,那么事情会变得棘手.实际上,您必须定义自定义处理程序并重写路径,以便将路由值附加到查询字符串. public class RouteWithQueryHandler : PageRouteHandler { public RouteWithQueryHandler(string virtualPath,bool checkPhysicalUrlAccess) : base(virtualPath,checkPhysicalUrlAccess) { } public RouteWithQueryHandler(string virtualPath) :base(virtualPath) { } public override IHttpHandler GetHttpHandler(RequestContext requestContext) { var request = requestContext.HttpContext.Request; var query = HttpUtility.ParseQueryString(request.Url.Query); foreach (var keyPair in requestContext.RouteData.Values) { query[HttpUtility.UrlEncode(keyPair.Key)] = HttpUtility.UrlEncode( Convert.ToString(keyPair.Value)); } var qs = string.Join("&",query); requestContext.HttpContext.RewritePath( requestContext.HttpContext.Request.Path,null,qs); return base.GetHttpHandler(requestContext); } } 这可以注册如下: routes.Add("groupname",new Route("{groupname}/products.aspx",new RouteWithQueryHandler("~/products.aspx",true))); 要避免将值拉到路由数据上,需要做很多工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – Unity使用参数将依赖项注入MVC??过滤器类
- asp.net-mvc – asp.net mvc – 视图中的命名空间
- asp.net-mvc-3 – 为什么抛出NULL值异常?
- asp.net-mvc-3 – Value Injecter是否会映射集合属性?
- ASP.NET相当于PHP的$_GET和$_POST?
- asp.net – 如何从ajax调用web api Controller
- asp.net-mvc – Azure移动服务与Web API
- asp.net – RenderBody()和RenderSection()必须在每个子版面
- asp.net-mvc – 嵌套的MVC母版页
- asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击
推荐文章
站长推荐
热点阅读