3

だから...私は電子メールを生成しようとしているビジネスオブジェクト/マネージャーを持っています。

これらの電子メールには、Web サイト上のさまざまなコンテンツへのリンクが含まれています...したがって、MVC ルーティングについて理解する必要があります..または、少なくとも Web サイトの URL を生成する方法...

ただし、私のビジネス オブジェクトは RequestContext などにアクセスできず、電子メールの生成は必ずしも Web サイトへの Web 要求の結果ではありません (電子メールを生成するバックグラウンド スレッドで実行されるディスパッチャがあります)。

リクエストにアクセスせずにURLを生成する方法 - したがって、URLHelperを使用できないというアイデア...

考え?

4

3 に答える 3

3

コントローラーの外部で UrlHelper を取得するには、UrlHelper とルーティング データを HttpContext にフィードする必要があります。次に例を示します。

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;    

HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
UrlHelper helper =  = new UrlHelper(new RequestContext(context, RouteTable.Routes.GetRouteData(context)));
于 2009-10-02T16:32:54.907 に答える
1

私はスキーマを定義し、ルーティングとビジネスロジックの両方にそれを認識させることを好みます。同じURLスキーマの異なる実装を意味します。

いくつかの理由:

  1. ルーティングメカニズムが変更される可能性があります。たとえば、機能では、url_rewriteモジュールに切り替えることができます。
  2. 負荷分散されたインストールで発生する可能性のある問題。
  3. 文書化されていない方法でURLHelperを使用しようとする必要さえありません。

ところで、URLHelperからのHttpRequestを簡単に置き換えることができます。以前はこれを単体テストに使用していました。詳細については、HttpContextBaseの単体テストを検索するか、MvcContribのソースコードの例を参照してください。これは、ホストされていない環境でURLヘルパーと関連するすべてのものをインスタンス化するのに役立ちます。しかし、私はまだこれが良い考えだとは思いません。

于 2009-07-04T19:04:15.487 に答える
0

ASP.NET MVC5 (およびおそらく MVC4 - いつ導入されたかはわかりません) では、HttpRequest.RequestContext. 例えば:

var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
于 2014-04-02T00:06:35.593 に答える