首页 > 解决方案 > 在没有请求的asp.net webform自定义类中制作相对url

问题描述

我实现了某种调用函数 ProcessJob 的作业调度。现在在这个方法中,我需要为我的一个页面生成 url,即 DoanloadPage.aspx?some_params。该网址通过电子邮件发送给用户,当用户单击该链接时,它将进入页面。

这里的问题是我没有在 Web 请求方法中生成 url,或者我无权访问 Request 对象。URL 需要在线程化的自定义类中生成,即不在网络请求中。

所以我不能使用这些解决方案:

HostingEnvironment.MapPath("test.aspx");
VirtualPathUtility.ToAbsolute("123.aspx");
HttpContext.Current.Request.Url.Authority;

这些都不起作用,因为我认为它们都以某种方式依赖于当前的请求或会话。那么如何在我的代码中为我的应用程序生成 url,以便我可以随意使用它们。

标签: c#asp.net.netwebforms

解决方案


如果您的方法不能使用HttpContext.Current.Request.Url,例如它是后台计划任务,那么您可以使用以下任一选项:

  • 如果您的代码托管在同一个 ASP.NET 应用程序中,您可以在第一个请求中将站点的站点域名传递给您的类。为此,您需要处理Application_BeginRequest事件并从中获取域HttpContext.Current.Request.Url,然后将其传递给您的类,或者将其存储在应用程序范围的存储中。您可以在这篇文章或原始文章中找到实现。
    注:代码在SO中有,这里不再重复代码。

  • 如果您的代码未托管在同一个 ASP.NET 应用程序中,或者出于任何原因您不想依赖Application_BeginRequest,作为另一种选择,您可以将站点域名存储在一个设置中(例如 app.condig 或 web.config 中的 appsetigs )。 config 如果它是网络应用程序)并在您的代码中使用它。


推荐阅读