Vi na Internet que muitos amigos reescrevem url em asp.net e usam o método HttpHandle+Server.Transfer. Na verdade, este método está errado. Primeiro, HttpHandle não pode implementar urlrewrite; em segundo lugar, Server.Transfer é um redirecionamento padrão, e não urlrewrite;
Na verdade, você não precisa implementar seu próprio HttpHandle ou HttpModule para implementar urlrewrite. Ele pode ser facilmente implementado com algumas linhas de código.
O que estou apresentando aqui é um host virtual. O host virtual é diferente do seu próprio servidor. Você não tem permissão para modificar o iis, nem para instalar plug-ins do iis, como o iis rewrite. Mas ainda podemos completar facilmente as funções necessárias.
O método específico é o seguinte: Abra global.asax.cs e localize o void protegido Application_BeginRequest (remetente do objeto, EventArgs e). Pelo nome do método, acho que posso adivinhar o que ele faz. Digite o seguinte código:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string oldUrl = HttpContext.Current.Request.RawUrl;
padrão de string = @"^(.+)default/(d+).aspx(?.*)*$";
string substituir = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, padrão, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, padrão, substituir, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
Com o código acima, acesso uma URL semelhante a: .../default/123.aspx Claro que esta URL não existe no meu computador, então será direcionada para: .../default.aspx id? =123.
É claro que, usando expressões regulares poderosas, você pode reescrever a URL de acordo com suas próprias necessidades. Tudo isso é feito silenciosamente no lado do servidor, e o cliente não saberá disso. Por estar em um host virtual, só podemos redirecionar o arquivo .aspx. Se for nosso próprio servidor, podemos processar qualquer sufixo apenas registrando o sufixo no iis. Por exemplo, você pode registrar um tipo como *.myweb, para que quando outras pessoas visitarem default/456.myweb, você possa redirecioná-lo para default.aspx?id=456. Em uma palavra, desde que você possa pensar nisso, .net pode ajudá-lo a perceber isso, e tudo isso não requer muito código.