Получение URL переписанного запроса?

#c# #asp.net

#c# #asp.net

Вопрос:

У всех пользователей на моем сайте есть общедоступные страницы профиля. Я использую перезапись URL-адресов для изменения URL-адресов из формы 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}amp;{1}", userId, Request.QueryString));
                }
            }
            catch (Exception ex)
            {
            }
        }
    }
}
  

Это работает нормально. Однако, если я выполняю обратную отправку на сервер, URL меняется с чего-то вроде /username формы /profile?id=5ab47aa3-3b4d-4de6-85df-67527c9cdb52amp; , которую я хочу скрыть от пользователя.

Я думал о том, чтобы сделать что-то вроде Response.Redirect(Request.RawUrl); отправки пользователя обратно на нужную страницу. Однако, Request похоже, не содержит никакой информации о желаемом URL.

Есть ли какой-либо способ найти предварительно переписанный URL?

Ответ №1:

На какой платформе вы работаете? Если IIS 7, вам лучше всего использовать IIS URL Rewrite 2.0. Вы можете найти несколько советов по работе с обратной отправкой, используя это.

Комментарии:

1. Некоторые предложения и связанные страницы в статье все еще могут быть полезны для IIS 6

Ответ №2:

Я предлагаю вам использовать Routing , таким образом, вы можете написать свой код ASP.NET образом, но все еще есть нужные вам URL-адреса:

Маршрутизация с ASP.NET Веб-формы