מה לעשות כששימוש עם UrlRoutingHandler לא עובדת תחת IIS
בעבר כתבתי על היכולת לייצר מנגנון URL Shortcut בשימוש עם UrlRoutingHandler.
לפעמים הקוד במחלקה עובד רק כשעובדים עם השרת הפנימי של visual studio, אבל כשעוברים לעבוד מול IIS, הקוד מפסיק לעבוד.
נקח לדוגמא את הקוד הבא:
public class RoutingHandler : UrlRoutingHandler, IRouteHandler
{
public string Url { get; set; }
protected override void VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext)
{
httpContext.Response.Redirect(Url);
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
}
הקוד הזה יאפשר לנו להשתמש במנגנון ה - Routing גם באפליקציות asp.net web forms עבור קבצי html.
לדוגמא נוכל לכתוב ב - application start את הקוד הבא:
RouteTable.Routes.Add("login",
new Route("login",
new RoutingHandler()
{
Url = "~/Managment/login.htm"
}));
(מכיון ששימוש סטנדרטי של RouteTable.Routes.MapPageRoute לא עובד עם קבצי htm)
בכל מקרה הקוד עובד תמיד תחת vs, אבל כשמעלים ל - IIS לפעמים זה מפסיק לעבוד.
מה שצריך לעשות הוא ראשית להוסיף בקונפיג (תחת system.webServer) את הקוד הבא (בהנחה שיש לכם iis 7 ומעלה)
<handlers>
<add name="UrlRoutingHandler"
preCondition="integratedMode"
verb="*"
path="UrlRouting.axd"
type="LP.Web.RoutingHandler, LP.Web"/>
</handlers>
במידה ומותקן לכם על HttpRedirection תצטרכו להוסיף בקונפיג גם את הקוד הבא:
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule,
System.Web,
Version=4.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
כעת הקוד שלכם יעבוד גם על IIS