A reescrita de URL consiste em reescrever o endereço de URL (suor ^_^).
Detalhes: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Vantagens: encurtar url, etc.
Uso: 1. Baixe URLRewrite.dll da ms e coloque-o em sua lixeira
2 . Defina as seguintes configurações em web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Regras>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verbo="*" path="*.aspx"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
Em seguida, escreva em cs:
private void Page_Load(object sender, System.EventArgs e)
{
//Coloque aqui o código do usuário para inicializar a página
Response.Write(Request.QueryString["id"]+"<BR>");
Response.Write("haha");
}
Basta digitar
localhost/overred/d123.aspx (nota: o início deve ser d, seguido de um número)
Na verdade, este d123.aspx é virtual e na verdade não existe. Desde que caiba no formato.
Ele irá pular para http://localhost/overred/default.aspx
e poderá capturar alguns parâmetros padrão, como id, que é o número após o seu d (o último deve ser um número), para que você possa exibir o id como artigo 123.
Se um postback for gerado na URL reescrita, ele será passado para d123.aspx, para que o usuário veja o endereço real ao clicar no botão. O MSDN diz: Mas da perspectiva do usuário, se o usuário clicar no botão, eles poderão. ser perturbado por mudanças repentinas de URL.
Pode-se ver que ms considera os clientes como seu Deus! (Sério? #¥%…—*)
Paracontinuar citando ms:
Isso acontece porque quando o Web Form é renderizado, ele define sua propriedade action diretamente para o valor do caminho do arquivo no objeto Request. Obviamente, quando o formulário da Web é renderizado, a URL foi reescrita de /Products/Beverages.aspx para ListProductsByCategory.aspx?CategoryID=1, indicando que o objeto Request informa que o usuário deseja acessar ListProductsByCategory.aspx?CategoryID=1 . Simplesmente fazer com que o formulário do lado do servidor não renderize as propriedades da ação resolve esse problema. (Por padrão, o navegador postará de volta se o formulário não contiver propriedades de ação.)
Infelizmente, Web Forms não permite especificar propriedades de ação explicitamente, nem permite definir determinadas propriedades para desabilitar a renderização de propriedades de ação. . Portanto, devemos estender a classe System.Web.HtmlControls.HtmlForm nós mesmos, substituir o método RenderAttribute() e declarar explicitamente que ele não renderiza atributos de ação.
Graças ao recurso de herança, podemos obter todas as funcionalidades da classe HtmlForm e obter o comportamento desejado apenas adicionando algumas linhas de código. A seguir é mostrado o código completo da classe personalizada:
namespace ActionlessForm {
Formulário de classe pública: System.Web.UI.HtmlControls.HtmlForm
{
substituição protegida void RenderAttributes (escritor HtmlTextWriter)
{
escritor.WriteAttribute("nome", this.Nome);
base.Attributes.Remove("nome");
escritor.WriteAttribute("método", this.Method);
base.Attributes.Remove("método");
this.Attributes.Render
(escritor);
base.Attributes.Remove("ação");
escritor.WriteAttribute("id", base.ClientID);
}
}
}
O código do método RenderAttributes() substituído contém apenas o código exato do método RenderAttributes() da classe HtmlForm, sem definir os atributos da ação. (Usei o Reflector de Lutz Roeder para visualizar o código-fonte da classe HtmlForm.)
Depois de criar essa classe e compilá-la, para usá-la em um aplicativo Web ASP.NET, você deve primeiro adicioná-la ao arquivo References do aplicativo Web. . Então, para usá-lo no lugar da classe HtmlForm, basta adicionar o seguinte no topo da sua página ASP.NET:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
Em seguida, substitua <form runat="server"> (se houver) por:
<skm:Form id="Form1" method="post" runat="server">
e à direita < Substituir a tag /form> com:
</skm:Form>
O exemplo acima é herdar um formulário Na verdade, existe uma maneira mais simples, que é herdar a página, então você não precisa alterar nada na página aspx. .
Código:
usando o sistema;
usando System.IO;
usando System.Web;
usando System.Web.UI
URL do namespace
;
{
/**//// <resumo>
/// Classe base da página www.downcodes.com
/// </sumário>
classe pública OLPage: Página
{
OLPágina pública()
{
}
/**//// <resumo>
/// Substitua o método HtmlTextWriter padrão e modifique o atributo value na tag do formulário para que seu valor seja o URL reescrito em vez do URL real.
/// </sumário>
/// <param name="writer"></param>
substituição protegida void Render (gravador HtmlTextWriter)
{
if (o gravador é System.Web.UI.Html32TextWriter)
{
escritor = novo FormFixerHtml32TextWriter(escritor.InnerWriter);
}
outro
{
escritor = novo FormFixerHtmlTextWriter(escritor.InnerWriter);
}
base.Render(escritor);
}
}
classe interna FormFixerHtml32TextWriter: System.Web.UI.Html32TextWriter
{
private string _url; // URL falsa
internal FormFixerHtml32TextWriter(TextWriter Writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
substituição pública void WriteAttribute (nome da string, valor da string, codificação bool)
{
// Se o atributo de saída atual for o atributo action da tag form, substitua seu valor pela URL falsa reescrita
if (_url!= null && string.Compare(nome, "ação", verdadeiro) == 0)
{
valor = _url;
}
base.WriteAttribute(nome, valor, codificação);
}
}
classe interna FormFixerHtmlTextWriter: System.Web.UI.HtmlTextWriter
{
string privada _url;
interno FormFixerHtmlTextWriter(escritor TextWriter):base(escritor)
{
_url = HttpContext.Current.Request.RawUrl;
}
substituição pública void WriteAttribute (nome da string, valor da string, codificação bool)
{
if (_url!= null && string.Compare(nome, "ação", verdadeiro) == 0)
{
valor = _url;
}
base.WriteAttribute(nome, valor, codificação);
}
}
}
Você o encapsula em uma dll e pode extraí-lo mais tarde apenas adicionando uma referência!
ok, é tão fácil!