在ASP.NET MVC中在视图或控制器之外生成URL

5
我遵循CodeProject上的文章"使用ASP.NET模拟Windows服务来运行定时任务", 在"过期后再次将项目存储在缓存中"部分,我需要访问我的应用程序的一个页面。
我想使用Asp.Net MVC UrlHelper生成URL而不是硬编码URL,但似乎需要一些我在此上下文中无法访问的实例,因为它不在控制器或视图中。
是否可能或是否有其他解决方案?
编辑:
遗憾的是HttpContext.Current在CacheItemRemovedCallBack中不可访问。 因此,唯一的解决方案似乎是在Application_Start方法中存储所需的值(Url.Host),以便稍后构建完整的URL。

你试过HttpContext.Current.Request了吗? - sasjaq
3个回答

5
您可以使用 Url.Action 方法和以下参数:
@Url.Action("Index", "Home", routeValues, Request.Url.Scheme)

或者

new UrlHelper(HttpContext.Request.RequestContext).Action("Index", "Home", routeValues, Request.Url.Scheme)

1
谢谢,但我不在视图中,所以我不能使用@Url助手或Request属性。 - Jérémie Bertrand
@JérémieBertrand 你能访问HttpContext实例吗? - Ufuk Hacıoğulları
好主意。我现在无法尝试,但通常我可以使用它。 - Jérémie Bertrand
1
如果您不在请求中(例如,计划的作业),这将无法工作。 - Timotei
@Timotei 你会发现,ASP.NET MVC中的许多类在Web应用程序的上下文之外是无法工作的。 - Ufuk Hacıoğulları

2
你可以创建自己的UrlHelper实例。 为此,你需要访问当前http请求。 这可以通过HttpContext的静态实例HttpContext.Current来实现:
new UrlHelper(HttpContext.Current.Request.RequestContext).Action("action");

2
如果您不在请求中(例如,计划的作业),这将无法工作。 - Timotei

0

欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便其他用户知道它是什么以及为什么存在,然后引用您链接的页面中最相关的部分,以防目标页面不可用。仅仅是一个链接的答案可能会被删除。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接