إعادة كتابة عنوان URL هي إعادة كتابة عنوان URL (العرق ^_^).
التفاصيل: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
المزايا: تقصير عنوان url، وما إلى ذلك.
الاستخدام: 1. قم بتنزيل URLRewrite.dll الخاص بـ ms وضعه في سلة المهملات
2 اضبط الإعدادات التالية في web.config:
<?xml version="1.0" encoding="utf-8" ?>.
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<addverb="*" 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 (يجب أن يكون الأخير رقمًا)، بحيث يمكنك عرض المعرف كما 123 المادة.
إذا تم إنشاء إعادة النشر في عنوان URL المعاد كتابته، فسيتم تمريره إلى d123.aspx، بحيث يرى المستخدم العنوان الفعلي عند النقر فوق الزر. تقول MSDN: ولكن من وجهة نظر المستخدم، إذا قام المستخدم بالنقر فوق الزر، فيمكنه ذلك تنزعج من التغييرات المفاجئة في عنوان URL.
ويمكن ملاحظة أن السيدة تعتبر العملاء إلهًا له! (حقًا؟ #¥%...—*)
لمواصلة الاقتباس ms:
يحدث هذا لأنه عندما يتم عرض نموذج الويب، فإنه يقوم بتعيين خاصية الإجراء الخاصة به مباشرة إلى قيمة مسار الملف في كائن الطلب. بالطبع، عند عرض نموذج الويب، تتم إعادة كتابة عنوان URL من /Products/Beverages.aspx إلى ListProductsByCategory.aspx?CategoryID=1، مما يشير إلى أن كائن الطلب يُبلغ عن رغبة المستخدم في الوصول إلى ListProductsByCategory.aspx?CategoryID=1 . إن مجرد جعل النموذج من جانب الخادم لا يعرض خصائص الإجراء يحل هذه المشكلة. (افتراضيًا، سيقوم المتصفح بالنشر مرة أخرى إذا كان النموذج لا يحتوي على خصائص الإجراء.)
لسوء الحظ، لا تسمح لك نماذج الويب بتحديد خصائص الإجراء بشكل صريح، كما أنها لا تسمح لك بتعيين خصائص معينة لتعطيل عرض خصائص الإجراء. . لذلك، يجب علينا توسيع فئة System.Web.HtmlControls.HtmlForm بأنفسنا، وتجاوز طريقة RenderAttribute() والإشارة بوضوح إلى أنها لا تعرض سمات الإجراء.
بفضل ميزة الميراث، يمكننا الحصول على جميع وظائف فئة HtmlForm والحصول على السلوك المطلوب بمجرد إضافة بضعة أسطر من التعليمات البرمجية. يوضح ما يلي الكود الكامل للفئة المخصصة:
namespace ActionlessForm {
نموذج الفئة العامة: System.Web.UI.HtmlControls.HtmlForm
{
تجاوز محمي لRenderAttributes (كاتب HtmlTextWriter)
{
WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
الكاتب.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action")
;
الكاتب.WriteAttribute("id"، base.ClientID);
}
}
}
يحتوي رمز أسلوب RenderAttributes() الذي تم تجاوزه فقط على الرمز الدقيق لأسلوب RenderAttributes() الخاص بفئة HtmlForm، دون تعيين سمات الإجراء. (لقد استخدمت عاكس Lutz Roeder لعرض الكود المصدري لفئة HtmlForm.)
بعد إنشاء هذه الفئة وتجميعها، لاستخدامها في تطبيق ويب ASP.NET، يجب عليك أولاً إضافتها إلى ملف المراجع الخاص بتطبيق الويب . وبعد ذلك، لاستخدامه بدلاً من فئة HtmlForm، ما عليك سوى إضافة ما يلي إلى أعلى صفحة ويب ASP.NET الخاصة بك:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
التجميع = "ActionlessForm" %>
ثم استبدل <form runat = "server"> (إن وجد) بـ:
<skm:Form id = "Form1" way = "post" runat = "server">
وعلى اليمين < استبدال العلامة /form> مع:
</skm:Form>
ما ورد أعلاه هو وراثة نموذج، في الواقع، هناك طريقة أبسط، وهي وراثة الصفحة، لذلك لا تحتاج إلى تغيير أي شيء في صفحة aspx. .
شفرة:
باستخدام النظام؛
باستخدام System.IO؛
باستخدام System.Web؛
باستخدام System.Web.UI
؛
{
/**//// <الملخص>
/// الفئة الأساسية للصفحة www.downcodes.com
/// </الملخص>
فئة عامة OLPage: الصفحة
{
صفحة OLP العامة ()
{
}
/**//// <الملخص>
/// تجاوز طريقة HtmlTextWriter الافتراضية وتعديل سمة القيمة في علامة النموذج بحيث تكون قيمتها هي عنوان URL المعاد كتابته بدلاً من عنوان URL الحقيقي.
/// </الملخص>
/// <param name="writer"></param>
تجاوز محمي عرض باطلة (كاتب HtmlTextWriter)
{
إذا (الكاتب هو System.Web.UI.Html32TextWriter)
{
Writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
آخر
{
Writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}
}
الطبقة الداخلية FormFixerHtml32TextWriter: System.Web.UI.Html32TextWriter
{
سلسلة خاصة _url؛ // عنوان URL مزيف
داخلي FormFixerHtml32TextWriter(TextWriterwriter):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
التجاوز العام لـ WriteAttribute (اسم السلسلة، قيمة السلسلة، ترميز منطقي)
{
// إذا كانت سمة الإخراج الحالية هي سمة الإجراء لعلامة النموذج، فاستبدل قيمتها بعنوان URL المزيف المعاد كتابته
إذا (_url != null && string.Compare(name, "action, true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}
الطبقة الداخلية FormFixerHtmlTextWriter: System.Web.UI.HtmlTextWriter
{
سلسلة خاصة _url؛
FormFixerHtmlTextWriter الداخلي (كاتب النص): القاعدة (الكاتب)
{
_url = HttpContext.Current.Request.RawUrl;
}
التجاوز العام لـ WriteAttribute (اسم السلسلة، قيمة السلسلة، ترميز منطقي)
{
إذا (_url != null && string.Compare(name, "action, true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}
}
يمكنك تغليفه في ملف dll، ويمكنك سحبه لاحقًا بمجرد إضافة مرجع!
حسنًا، إنه سهل جدًا!