URL 재작성은 URL 주소를 재작성하는 것입니다(땀^_^).
세부 정보: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
장점: URL 단축 등
사용법: 1. ms의 URLRewrite.dll을 다운로드하여 휴지통에 넣습니다.
2 . web.config에서 다음 설정을 지정합니다:
<?xml version="1.0" 인코딩="utf-8" ?>
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<규칙>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
그런 다음 cs에 작성합니다:
private void Page_Load(object sender, System.EventArgs e)
{
//페이지를 초기화하려면 여기에 사용자 코드를 입력하세요.
Response.Write(Request.QueryString["id"]+"<BR>");
Response.Write("하하");
}
그냥
localhost/overred/d123.aspx를 입력하세요(참고: 시작은 d여야 하고 뒤에 숫자가 와야 합니다).
실제로 이 d123.aspx는 가상이며 실제로 존재하지 않습니다. 형식에 맞는 한.
http://localhost/overred/default.aspx 로 이동하여
d 뒤의 숫자(마지막 숫자는 숫자여야 함)인 id와 같은 기본 매개변수를 캡처하여 ID를 표시할 수 있습니다. 123조로 되어있습니다.
다시 작성된 URL에서 포스트백이 생성되면 d123.aspx로 전달되므로 사용자가 버튼을 클릭하면 실제 주소가 표시됩니다. MSDN은 다음과 같이 말합니다. 그러나 사용자가 버튼을 클릭하면 그럴 수도 있습니다. 갑작스러운 URL 변경으로 인해 혼란을 겪으실 수 있습니다.
ms는 고객을 자신의 신으로 여기고 있음을 알 수 있습니다! (정말요? #₩%…—*)
ms를 계속 인용하려면:
이는 Web Form이 렌더링될 때 해당 작업 속성을 요청 개체의 파일 경로 값으로 직접 설정하기 때문에 발생합니다. 물론 웹 양식이 렌더링되면 URL이 /Products/Beverages.aspx에서 ListProductsByCategory.aspx?CategoryID=1로 다시 작성되어 요청 개체가 사용자가 ListProductsByCategory.aspx?CategoryID=1에 액세스하려고 한다고 보고함을 나타냅니다. . 간단히 서버 측 양식이 작업 속성을 렌더링하지 않도록 하면 이 문제가 해결됩니다. (기본적으로 양식에 작업 속성이 포함되어 있지 않으면 브라우저는 다시 게시합니다.)
불행하게도 Web Forms에서는 작업 속성을 명시적으로 지정할 수 없으며 작업 속성의 렌더링을 비활성화하기 위해 특정 속성을 설정할 수도 없습니다. . 따라서 System.Web.HtmlControls.HtmlForm 클래스를 직접 확장하고 RenderAttribute() 메서드를 재정의하고 작업 특성을 렌더링하지 않는다는 점을 명시적으로 명시해야 합니다.
상속 기능 덕분에 우리는 HtmlForm 클래스의 모든 기능을 얻을 수 있으며 코드 몇 줄만 추가하면 원하는 동작을 얻을 수 있습니다.
다음은 사용자정의
클래스의 전체 코드를 보여줍니다.
공개 클래스 양식 : System.Web.UI.HtmlControls.HtmlForm
{
보호된 재정의 무효 RenderAttributes(HtmlTextWriter 작가)
{
writer.WriteAttribute("이름", this.Name);
base.Attributes.Remove("이름");
writer.WriteAttribute("메소드", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action")
;
writer.WriteAttribute("id", base.ClientID);
}
}
}
재정의된 RenderAttributes() 메서드의 코드에는 작업 특성을 설정하지 않고 HtmlForm 클래스의 RenderAttributes() 메서드에 대한 정확한 코드만 포함됩니다. (저는 Lutz Roeder의 Reflector를 사용하여 HtmlForm 클래스의 소스 코드를 보았습니다.)
이 클래스를 만들고 컴파일한 후 ASP.NET 웹 응용 프로그램에서 사용하려면 먼저 웹 응용 프로그램의 References 파일에 추가해야 합니다. . 그런 다음 HtmlForm 클래스 대신 사용하려면 ASP.NET 웹 페이지 상단에 다음을 추가하면 됩니다.
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
그런 다음 <form runat="server">(있는 경우)를
<skm:Form id="Form1" method="post" runat="server">
로 바꾸고오른쪽에서 < 바꾸기 /form> 태그:
</skm:Form>
위의 내용은 양식을 상속하는 것입니다. 실제로 페이지를 상속하는 더 간단한 방법이 있으므로 aspx 페이지에서 아무것도 변경할 필요가 없습니다. .
암호:
시스템 사용;
System.IO 사용;
System.Web 사용;
System.Web.UI
네임스페이스 URL
사용
{
/**//// <요약>
/// 페이지 기본 클래스 www.downcodes.com
/// </summary>
공개 클래스 OLPage : 페이지
{
공개 OL페이지()
{
}
/**//// <요약>
/// 기본 HtmlTextWriter 메서드를 재정의하고 양식 태그의 value 속성을 수정하여 해당 값이 실제 URL이 아닌 다시 작성된 URL이 되도록 합니다.
/// </summary>
/// <param name="writer"></param>
보호된 재정의 무효 렌더링(HtmlTextWriter 작가)
{
if (작성기는 System.Web.UI.Html32TextWriter입니다)
{
작가 = 새로운 FormFixerHtml32TextWriter(writer.InnerWriter);
}
또 다른
{
작가 = 새로운 FormFixerHtmlTextWriter(writer.InnerWriter);
}
베이스.렌더(작가);
}
}
내부 클래스 FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 가짜 URL
내부 FormFixerHtml32TextWriter(TextWriter 작가):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
공개 재정의 void WriteAttribute(문자열 이름, 문자열 값, 부울 인코딩)
{
// 현재 출력 속성이 form 태그의 action 속성인 경우 해당 값을 다시 작성된 가짜 URL로 바꿉니다.
if (_url != null && string.Compare(name, "action", true) == 0)
{
값 = _url;
}
base.WriteAttribute(이름, 값, 인코딩);
}
}
내부 클래스 FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
개인 문자열 _url;
내부 FormFixerHtmlTextWriter(TextWriter 작가):base(작가)
{
_url = HttpContext.Current.Request.RawUrl;
}
공개 재정의 void WriteAttribute(문자열 이름, 문자열 값, 부울 인코딩)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
값 = _url;
}
base.WriteAttribute(이름, 값, 인코딩);
}
}
}
이를 dll로 캡슐화하고 나중에 참조만 추가하여 가져올 수 있습니다!
좋아, 정말 쉽구나!