0

私はMVCアプリを持っており、ルートテーブルにデータを入力するには、次のような方法があります。

public static void RegisterRoutes(RouteCollection routes){
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    ....
   routes.MapRoute("default", "{controller}/{action}/{id}", new { controller = "Home", action = "index", id="" });
   ... etc
}

//and in global.asax it gets called like:
RegisterRoutes(RouteTable.Routes);

MVCアプリの外部から(一部のコンソールアプリでは、ルートを取得するためだけに)そのメソッドを呼び出すと、新しい空のコレクションが渡され、MVCアプリで使用されるルートが入力されますが、どのように使用されますか?ルートのコレクションのみに基づいて、指定されたコントローラー名、アクション、およびその他のパラメーターのURLを認識できますか?(ここでも、Webアプリの外部から)

4

2 に答える 2

0

私はroutes[0].GetVirtualPath()があなたが探しているものだと思います。ただし、RequestContextとRouteValueDictionaryを渡す必要があります。ルートが入力を処理できない場合、nullを返します

于 2013-01-24T22:12:44.600 に答える
0

また、コンソールアプリ(サイトマップジェネレーター)のルートコレクションからURLを生成できるようにしたいのですが、ルートが多すぎて単純な置換を実行できませんでした。結局、UrlHelper.GenerateUrlのラッパーを作成しました...

public class UrlGenerator
{
    protected string Protocol;
    protected string HostName;
    protected RequestContext RequestContext;
    public RouteCollection RouteCollection;

    public UrlGenerator(string protocol, string hostName, Action<RouteCollection> registerRoutes)
    {
        Protocol = protocol;
        HostName = hostName;
        RouteCollection = new RouteCollection();
        registerRoutes(RouteCollection);
        // Construct a request context with as little as possible
        RequestContext = new RequestContext(new HttpContextWrapper(new HttpContext(new HttpRequest(null, "http://x.com", null), new HttpResponse(null))), new RouteData());
    }

    public string GetUrl(string action, string controller, object routeData)
    {
        return GetUrl(action, controller, new RouteValueDictionary(routeData));
    }
    public string GetUrl(string action, string controller, RouteValueDictionary routeData)
    {
        return UrlHelper.GenerateUrl(null, action, controller, Protocol, HostName, null, routeData, RouteCollection, RequestContext, false);
    }
}

今、あなたはすることができます...

UrlGenerator g = new UrlGenerator("https", "myurl.com", RouteConfig.RegisterRoutes);
Console.WriteLine(g.GetUrl("Index", "Home", new { product = "toad-for-oracle" }));
于 2013-12-10T18:53:00.797 に答える