質問

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

Webforms内では、すべてのページのルートを指定する必要があるように思えます。特定のものがない場合に使用できる何らかの一般的なルートを探しています。

http://somedomain.com/folder1/folder2/page Folder1/folder2/page.aspxにマッピングされる可能性があります

助言がありますか?

ありがとう

役に立ちましたか?

解決

このような残りのすべてのルートを一致させることができます:

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

この場合、私たちはすべてのルートを知っており、他のものを「欠落」/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;
  }
}

これは、水平スクロールを防ぐために奇妙な場所で少し壊れていますが、全体的なポイントが得られます。繰り返しますが、これがであることを確認してください 過去 ルート、それ以外の場合は処理します すべて あなたのルート。

他のヒント

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

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

それ以外の場合は、ルーティングが.axDファイルを選択し、検証コントロールに必要なJavaScriptファイルを適切に読み込まないため、構文エラーを取得し続けます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top