获取重写请求的URL?

时间:2011-10-11 14:33:39

标签: c# asp.net

我网站上的所有用户都有面向公众的个人资料页面。我正在使用网址重写将网址从http://mysite.com/profile.aspx?id=sdsdfsdsdfsdfdsdffsdfsdf更改为http://mysite.com/Username,就像这样(在我的global.asax文件中):

static Regex _handleRegex1 = new Regex("/(?<hndl>[\\w]+)/?$", RegexOptions.Compiled);

void Application_BeginRequest(object sender, EventArgs e)
{

    System.Text.RegularExpressions.Match handleMatch = _handleRegex1.Match(Request.Url.LocalPath);
    if(handleMatch.Success){
        String handle = handleMatch.Groups[1].Value;

        using (SqlQuery query = new SqlQuery("[dbo].[sp_getUserIdByHandle]"))
        {
            try
            {
                query.AddParameter("@handle", handle, System.Data.SqlDbType.NVarChar, false);
                query.AddParameter("@userId", new Guid(), System.Data.SqlDbType.UniqueIdentifier, true);

                query.ExecuteNonQuery();

                Object userId = query.GetOutParameter("@userId");

                if (userId == DBNull.Value)
                {
                    Response.Redirect("~/default.aspx");
                }
                else
                {
                    Context.RewritePath(string.Format("~/profile.aspx?id={0}&{1}", userId, Request.QueryString));
                }
            }
            catch (Exception ex)
            {
            }
        }
    }
}

这很好用。但是,如果我对服务器进行回发,则URL会从/username更改为/profile?id=5ab47aa3-3b4d-4de6-85df-67527c9cdb52&形式,我希望将其隐藏起来。

我考虑过像Response.Redirect(Request.RawUrl);那样将用户发送回正确的页面。但是,Request似乎不包含有关所需网址的任何信息。

有没有办法找到预先重写的网址?

2 个答案:

答案 0 :(得分:1)

你在哪个平台上?如果是IIS 7,最好使用IIS URL Rewrite 2.0。你可以找到一些suggestions on dealing with postback using this

答案 1 :(得分:1)

我建议你使用Routing,这样你可以用ASP.NET编写代码,但仍然有你想要的Urls:

Routing with ASP.NET Web Forms