所以...我有一个业务对象/管理器将要生成电子邮件。从管理层MVC路由生成URL ...
这些电子邮件会包含指向各种内容的网站上...,因此需要了解有关MVC路由..或至少如何生成的网站网址...
但是我的业务对象将没有访问一个RequestContext等和电子邮件生成不一定是一个网站的Web请求的结果(我有一个调度程序运行在后台线程将生成电子邮件)
任何想法我可以如何无法访问请求而生成我的网址 - 因此无法使用URLHelper ...
想法?
所以...我有一个业务对象/管理器将要生成电子邮件。从管理层MVC路由生成URL ...
这些电子邮件会包含指向各种内容的网站上...,因此需要了解有关MVC路由..或至少如何生成的网站网址...
但是我的业务对象将没有访问一个RequestContext等和电子邮件生成不一定是一个网站的Web请求的结果(我有一个调度程序运行在后台线程将生成电子邮件)
任何想法我可以如何无法访问请求而生成我的网址 - 因此无法使用URLHelper ...
想法?
我更喜欢定义模式并使路由和业务逻辑都知道它。意味着相同URL模式的不同实现。
一些原因:
顺便说一句,你可以很容易地从URLHelper替换HttpRequest。我们曾经使用它来进行单元测试。有关更多信息,只需搜索HttpContextBase的单元测试或查看MvcContrib的源代码中的示例。这可以帮助在非托管环境中实例化URL助手和所有相关的东西。但我仍然认为这不是一个好主意。
为了获得控制器外部的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)));
在ASP.NET MVC5(也可能是MVC4 - 我不知道它被引入时),你可以这样做更直接使用HttpRequest.RequestContext
。例如:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
那么..只要我包裹我的实现在一个接口,这不应该是一个问题?例如IRouteHelper? 无论如何...不确定你的意思是“我更喜欢定义模式,并让路由和业务逻辑都知道它” - 如何使用模式驱动开发来定义路由? – iasksillyquestions 2009-07-04 19:07:18