asp.net-mvc-3 – 我需要什么样的路线才能提供虚荣网址?
发布时间:2020-05-25 05:16:31 所属栏目: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 – 处理程序执行子请求时出错’System.W
- asp.net-mvc – 将依赖项注入自定义模型绑定器并
- asp.net-mvc-3 – 比较(密码)属性
- asp.net – 如何在回发后阻止关闭模态弹出窗口(M
- 在ASP.NET Identity 2.0.0-beta1中禁用双因素身份
- asp.net-mvc – Upshot.js的当前状态
- asp.net – Page.RouteData.Values对于一个页面是
- .net – 从控制器返回一个EditorTemplate作为部分
- 在文件系统中获取ASP.NET MVC站点的路径
- asp.net – MasterPage是否知道正在显示的页面?
热点阅读
