asp.net-mvc-3 – 我需要什么样的路线才能提供虚荣网址?
发布时间:2020-12-16 00:01:11 所属栏目:asp.Net 来源:网络整理
导读:我想为我的用户提供虚荣网址,例如: www.foo.com/sergio 我需要创建什么样的路线? 想象一下,我有以下控制器和动作,如何将虚荣URL映射到该控制器? public ActionResult Profile(string username){ var model = LoadProfile(username); return View(model);}
我想为我的用户提供虚荣网址,例如:
www.foo.com/sergio 我需要创建什么样的路线? 想象一下,我有以下控制器和动作,如何将虚荣URL映射到该控制器? public ActionResult Profile(string username) { var model = LoadProfile(username); return View(model); } 这是我尝试过的,会发生什么: 选项A: 每个URL都在此路由中捕获,这意味着我键入的每个URL都指向我的帐户控制器,而不是仅指向foo.com/ [USERNAME].不好. public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Profile","{username}",new { controller = "Account",action = "Profile",username = UrlParameter.Optional } ); routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults ); } 选项B: 默认路由工作正常,但在尝试访问配置文件foo.com/[USERNAME时,我收到HTTP 404错误. public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default",id = UrlParameter.Optional } // Parameter defaults ); routes.MapRoute( "DentistProfile",username = UrlParameter.Optional } ); } 解决方法
一个解决方案可能是使用自定义路由约束,
public class VanityUrlContraint : IRouteConstraint { private static readonly string[] Controllers = Assembly.GetExecutingAssembly().GetTypes().Where(x => typeof(IController).IsAssignableFrom(x)) .Select(x => x.Name.ToLower().Replace("controller","")).ToArray(); public bool Match(HttpContextBase httpContext,Route route,string parameterName,RouteValueDictionary values,RouteDirection routeDirection) { return !Controllers.Contains(values[parameterName].ToString().ToLower()); } } 并用它作为 routes.MapRoute( name: "Profile",url: "{username}",defaults: new {controller = "Account",action = "Profile"},constraints: new { username = new VanityUrlContraint() } ); routes.MapRoute( name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",id = UrlParameter.Optional } ); 这种方法的缺点是,与现有控制器名称相同的用户名的配置文件视图将不起作用,例如在项目中存在“资产”,“位置”和“AssetController”,“LocationController”等用户名,“资产”的配置文件视图,“位置”将无法正常工作. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 无法从程序集’Elmah’加载’Elmah.ErrorLogMod
- asp.net – 如何在C#2.0中的Web.config中加密用户名和密码
- asp.net – 通过ASP .Net成员身份进行用户登录
- asp.net-identity – 在调用SignIn后,可以通过OWIN修改ASP.
- 如何使用Castle Windsor与ASP.Net Web表单?
- asp.net – Repeater中DropDownList的SelectedValue
- asp.net-web-api – OAuthBearerAuthenticationMiddleware
- asp.net – 如何在.net中读取Elastic Beanstalk环境属性?
- 实体框架 – 具有实体框架的MVC MiniProfiler 5模型第一个错
- asp.net-mvc-5 – “确认密码”和“密码”不匹配. MVC5
推荐文章
站长推荐
- asp.net – 在.NET .NET页面生命周期中,DataBind
- 调试 – 如何调试经典ASP?
- asp.net-mvc – 在Owin Identity和Asp.Net MVC中
- 使用Azure ACS时无法从Active Directory注销
- asp.net – 如何添加验证到我的POCO(模板)类
- asp.net-mvc – ASP.NET MVC3 IIS7.5:Cache-Con
- asp.net-web-api – WebAPI 2 – CORS无法使用co
- 在.NET框架中强制使用英语异常
- ASP.NET MVC错误处理 – 删除aspxerrorpath
- asp.net-mvc – 实现多租户ASP.NET MVC应用程序的
热点阅读