12

Web フォームで ASP.NET 4.0 ルーティングを使用して、ある種のワイルドカードとして機能するルートを生成する簡単な方法はありますか?

WebForms内では、すべてのページのルートを指定する必要があるようです-パスからパスに直接マッピングするなど、特に何も必要としない場所で使用できるある種の汎用ルートを探しています...

http://somedomain.com/folder1/folder2/pageは、おそらく folder1/folder2/page.aspx にマップされます

助言がありますか?

ありがとう

4

2 に答える 2

24

次のように、残りのすべてのルートを一致させることができます。

routes.MapPageRoute("defaultRoute", "{*value}", "~/Missing.aspx");

この場合、すべてのルートがわかっているので、それ以外のものを「missing」/404 ページに送信したいと考えています。これはワイルドカードであり、すべてをキャッチするため、 必ず最後のルートとして配置してください。

または、同じ方法でルートを登録することもできますが、次のように内部的にページへのマッピングを行います。

routes.Add(new Route("{*value}", new DefaultRouteHandler()));

そのハンドラ クラスは、次のようなワイルドカード マッピングを行います。

public class DefaultRouteHandler : IRouteHandler
{
  public IHttpHandler GetHttpHandler(RequestContext requestContext)
  { 
    //Url mapping however you want here:
    var pageUrl = requestContext.RouteData.Route.Url + ".aspx";

    var page = BuildManager.CreateInstanceFromVirtualPath(pageUrl, typeof(Page)) 
               as IHttpHandler;
    if (page != null)
    {
      //Set the <form>'s postback url to the route
      var webForm = page as Page;
      if (webForm != null) 
         webForm.Load += delegate { webForm.Form.Action = 
                                    requestContext.HttpContext.Request.RawUrl; };
    }
    return page;
  }
}

これは、水平スクロールを防ぐために奇妙な場所で少し壊れていますが、全体的な要点はわかります。繰り返しますが、これが最後のルートであることを確認してください。そうしないと、 すべてのルートが処理されます。

于 2010-04-24T13:14:56.153 に答える
0

さらに-Webアプリに検証コントロールがある場合は、Global.asaxファイルの.axdファイルに例外を追加する必要があることに注意してください。

http://basgun.wordpress.com/2010/10/25/getting-syntax-error-in-asp-net-routing-due-to-webresource-axd/

そうしないと、ルーティングが.axdファイルを取得し、検証コントロールに必要なJavaScriptファイルを適切にロードしないため、構文エラーが発生し続けます。

于 2010-12-09T16:13:09.937 に答える