כידוע, ASP.NET WebForms משמר את הערכים של הפקדים בדף בין הpostbackים ע"י שימוש בform אחד המכיל, בדרך כלל, את כל שאר התגיות שבדף. בנוסף, בWebForms מקובל שכל דף עושה post לעצמו. כלומר, בדף default.aspx הערך של האטריבוט action של הform יהיה בדרך כלל גם כן default.aspx:
<form method="post" action="default.aspx" id="form1">
...
</form>
בנוסף, ASP.NET מבצע אופטימיזציה לURL המופיע בaction שיהיה יחסי לURL הנוכחי. כך למשל בדף הזמין בכתובת /blog/default.aspx הערך של action יהיה default.aspx בלבד.
למה זה חשוב? כנראה, בגלל ש .NET 4.0 היא הגרסה הראשונה של הframework שבה WebForms תומך בRouting, ומאפשר URLים ידידותיים, לא חשבו על תסריט של כתובת URL ידידותיות ובעברית, או לפחות לא בדקו את המימוש בצורה מספיקה.
לגבי מה הדברים אמורים?
נניח שהגדרנו Route כדלהלן:
RouteTable.Routes.MapPageRoute("bug", "באג/{unicode}", "~/default.aspx");
עכשיו, אם נגלוש לכתובת "/באג/בדיקה", נגיע לדף default.aspx כשהערך של הפרמטר unicode הוא "בדיקה". כמו"כ, בדף שיוגש לנו הערך של הaction בform יהיה, כצפוי, "בדיקה".
<form method="post" action="בדיקה" id="form1">
...
</form>
כעת אם הדף default.aspx יעשה PostBack לעצמו, השאילתא תתבצע בהצלחה, ותיראה כך:
POST /%D7%91%D7%90%D7%92/%D7%91%D7%93%D7%99%D7%A7%D7%94 HTTP/1.1
עד כאן הכל טוב ויפה. הבעיה מתחילה כשמנסים לבצע CallBack מאותו הדף. עוד...