如何使用用户名在asp.net中重写URL

时间:2012-01-06 17:01:26

标签: c# asp.net url-rewriting

我有一个asp.net Web应用程序,现在用户可以通过放入www.webdomain.com/page.aspx?usename=myusername获取配置文件。我想将其更改为www.webdomain.com/username。谢谢你的帮助。

4 个答案:

答案 0 :(得分:2)

使用MVC路由。这是一篇关于如何将mvc路由与webforms一起使用的好文章:

http://msdn.microsoft.com/en-us/magazine/dd347546.aspx

http://msdn.microsoft.com/en-us/library/cc668177.aspx

答案 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中执行代码。