我有一个asp.net Web应用程序,现在用户可以通过放入www.webdomain.com/page.aspx?usename=myusername获取配置文件。我想将其更改为www.webdomain.com/username。谢谢你的帮助。
答案 0 :(得分:2)
答案 1 :(得分:2)
示例IRouteConstraint:
public class IsUserActionConstraint : IRouteConstraint
{
//This is a static variable that handles the list of users
private static List<string> _users;
//This constructor loads the list of users on the first call
public IsUserActionConstraint()
{
_users= (from u in Models.Users.Get() select u.Username.ToLower()).ToList();
}
//Code for checking to see if the route is a username
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return _users.Contains((values["username"] as string).ToLower());
}
}
并且,要在Global.asax中注册路线:
routes.MapRoute(
"User Profile", // Route name
"{username}",
new { controller = "User", action = "Index", id = UrlParameter.Optional },// This stuff is here for ASP.NET MVC
new { IsUserAction = new IsUserActionConstraint() } //Your IRouteconstraint
);
在我的情况下,我的用户列表在应用程序生命周期中永远不会更改,因此我可以使用静态列表来缓存它。我建议你修改代码,这样你就可以检查以确保输入的值是匹配内的用户名。
答案 2 :(得分:1)
rewriterule www.webdomain.com/.+? www.webdomain.com/page.aspx?usename=$1
答案 3 :(得分:0)
有几种方法可以做到这一点。您可以使用ASP.NET MVC并使用IRouteConstraint创建路由以确保用户名存在。
你也可以创建一个IHttpModule来捕获www.webdomain.com/username的Application_BeginRequest和handel请求以及ReWriting或TransferRequest它们到www.webdomain.com/page.aspx?usename=myusername。
您也可以像在IHttpModule中一样直接在Global.asax中执行代码。