如何判断任意URL是否匹配定义的路由如何判断字符串是否匹配指定的命名路由?我有这样一条路线:routes.MapRoute("FindYourNewRental","find-your-new-rental/{market}/{community}.html",new{controller="FindYourNewRental",action="Community"});stringurl="http://www.website.com/find-your-new-rental/northerncalifornia/sacramento.html"如何以编程方式判断“url”字符串是否与这条路线匹配?像这样://将url与命名路由“FindYourNewRental”匹配if(IsRouteMatch(url,"FindYourNewRental")){//做某事}publicboolIsRouteMatch(stringurl,stringrouteName){//我该如何编码我通过添加一个自定义RouteInfo类来解决这个问题,该类使用提供的url和应用程序路径创建一个新的HttpContext,并使用它来获取基于新HttpContext对象的RouteData实例。然后我可以评估Controller和Action值以查看哪些路由匹配。我将此扩展方法连接到Uri类。感觉有点hackish,我希望有一种更简洁的方法来做到这一点,所以我留下这个问题以防其他人有更好的解决方案。ROUTEINFO类:publicclassRouteInfo{publicRouteInfo(RouteDatadata){RouteData=data;}publicRouteInfo(Uriuri,stringapplicationPath){RouteData=RouteTable.Routes.GetRouteData(newInternalHttpContext(uri,applicationPath));}公共RouteDataRouteData{得到;私有集;}privateclassInternalHttpContext:HttpContextBase{privatereadonlyHttpRequestBase_request;publicInternalHttpContext(Uriuri,stringapplicationPath):base(){_request=newInternalRequestContext(uri,applicationPath);}publicoverrideHttpRequestBaseRequest{get{return_request;}}}私有类InternalRequestContext:HttpRequestBase{privatereadonlystring_appRelativePath;私有只读字符串_pathInfo;publicInternalRequestContext(Uriuri,stringapplicationPath):base(){_pathInfo="";//uri.查询;(这导致了问题,请参阅评论-Stuart)if(String.IsNullOrEmpty(applicationPath)||!uri.AbsolutePath.StartsWith(applicationPath,StringComparison.OrdinalIgnoreCase))_appRelativePath=uri.AbsolutePath;else_appRelativePath=uri.AbsolutePath.Substring(applicationPath.Length);}publicoverridestringAppRelativeCurrentExecutionFilePath{get{returnString.Concat("~",_appRelativePath);}}publicoverridestringPathInfo{get{return_pathInfo;}}}}URI扩展方法://////Uri类的扩展方法///publicstaticclassUriExtensions{//////根据MVC指示提供的url是否匹配指定的控制器和动作值global.asax中定义的路由表。//////包含要评估的url的Uri对象///要匹配的控制器类的名称///要匹配的操作方法的名称///如果提供的url映射到提供的控制器则为真类和操作方法,否则为假。publicstaticboolIsRouteMatch(thisUriuri,stringcontrollerName,stringactionName){RouteInforouteInfo=newRouteInfo(uri,HttpContext.Current.Request.ApplicationPath);返回(routeInfo.RouteData.Values["controller"].ToString()==controllerName&&routeInfo.RouteData.Values["action"].ToString()==actionName);}}用法:Uriurl=newUri("http://www.website.com/find-your-new-rental/northerncalifornia/sacramento.html");if(url.IsRouteMatch("FindYourNewRental","Community")){//做某事}或者if(Request.Url.IsRouteMatch("FindYourNewRental","Community")){//做某事}RouteInfo类给我一个RouteData实例,我也可以访问路由参数这导致创建另一个Uri扩展方法:publicstaticstringGetRouteParameterValue(thisUriuri,stringparamaterName){返回routeInfo.RouteData.Values[paramaterName]!=null?routeInfo.RouteData.Values[paramaterName].ToString():null;现在可以这样使用了:有用,需要多了解C#学习教程,希望大家多多关注—stringsomeValue=url.GetRouteParameterValue("ParameterName");如需转载请注明出处:
