0

次のようなコントローラーがあります。

public class PageController : Controller
{
    public ActionResult Render(string url)
    {
        //this is just for testing!
        return Content("url was " + url);
    }
}

URLの値をコントローラーに渡そうとしています。例:
http://www.site.com/products/something/else

「products/something/else」を PageController の Render アクションに渡します。

これは、データベース内のレコードの一意のキーとして "products/something/else" を使用しているためです (レガシー システム、質問しないでください)。

したがって、私の結果のクエリは、次のようなものになります。

select * from foo where urlKey = 'products/something/else'

これまでのところ、Global.asax の RegisterRoutes セクションにこれがあります。

routes.MapRoute("pages", "{*url}", new { controller = "Page", action = "Render", url="/" });

しかし、これは期待どおりに機能しません...

www.site.com/products/something/else にアクセスすると、コントローラーに渡される値は「home/index/0」
になります RegisterRoutes で定義されている唯一のルートは、質問に記載されているものです。

4

2 に答える 2

3

以下のクラスはすべてのルートに一致しますが、必要に応じて変更できます。

public class LegacyRoute : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
      RouteData result = null;

      string url = httpContext.Request.RawUrl.Substring(1);

      result = new RouteData(this, new MvcRouteHandler());
      result.Values.Add("controller", "Page");
      result.Values.Add("action", "Render");
      result.Values.Add("url", url);

      return result;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
      return null;
    }
}

Global.asax.cs 内

routes.Add(new LegacyRoute());
于 2012-06-20T12:11:06.257 に答える
0

これが役に立てば幸いです。ルートの 1 つが同様のことを行います。これがコードです。

   routes.MapRoute(
            name: "Standard",
            url: "{controller}/{action}/{id}",
            defaults: new { id = UrlParameter.Optional, action = ControllersAndActions.TypicalController.IndexAction, page = 1 },
            constraints: new
            {
                controller = ControllersAndActions.ControllerConstraintExpression
            }
        );
于 2012-06-20T12:09:32.163 に答える