IRouteHandlerを使用する必要があり、カスタム ルートを作成する必要があります。
デフォルトでは、Web フォームはファイル システム要求処理を使用します。たとえば、MyWebsite/contact.aspx要求は、ルート メニューの下にある contact.aspx ファイル
を検索します。MyWebsite/superheroes/superheroes.aspxは、ルート メニューの superheroes ファイル内にあるsuperheroes.aspxファイルを探す必要があります。
global.asaxファイルを使用して、独自の処理を追加できます。必要なのは、 Application_Startメソッド内から、 RouteCollectionパラメーターを持つメソッドを呼び出すことだけです。したがって、 RegisterRoutesというメソッドを作成し、MyRouteConfig.csという新しいファイル内に配置する必要があります。
次に例を示します。
using System;
using Microsoft.AspNet.FriendlyUrls;
using System.Web.Routing;
using System.Web;
using System.Web.UI;
using System.Web.Compilation;
public static class MyRouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.EnableFriendlyUrls();
routes.MapPageRoute("superheroes", "superhero/{SuperheroName}", "~/superheroes.aspx");
routes.MapPageRoute("languageSuperheroes", "{language}/superhero/{SuperheroName}", "~/superheroes.aspx");
routes.Add(new System.Web.Routing.Route("{language}/{*page}", new LanguageRouteHandler()));
}
public class LanguageRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
string page = CheckForNullValue(requestContext.RouteData.Values["page"]);
string virtualPath = "~/" + page;
if (string.IsNullOrEmpty(page))
{
string language= CheckForNullValue(requestContext.RouteData.Values["language"]);
string newPage = "/home";
if (!string.IsNullOrEmpty(language))
newPage = "/" + language + newPage;
HttpContext.Current.Response.Redirect(newPage, false);
HttpContext.Current.Response.StatusCode = 301;
HttpContext.Current.Response.End();
//Otherwise, route to home
//page = "home";
}
if (!virtualPath.Contains(".aspx"))
virtualPath += ".aspx";
try
{
return BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as IHttpHandler;
}
catch
{
return null;
}
}
}
}
この記事をご覧ください:
http://dotnethints.com/blogs/localization-using-routing-system-on-a-web-forms-project-