c# - 在没有请求的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,以便我可以随意使用它们。
解决方案
如果您的方法不能使用HttpContext.Current.Request.Url
,例如它是后台计划任务,那么您可以使用以下任一选项:
如果您的代码托管在同一个 ASP.NET 应用程序中,您可以在第一个请求中将站点的站点域名传递给您的类。为此,您需要处理
Application_BeginRequest
事件并从中获取域HttpContext.Current.Request.Url
,然后将其传递给您的类,或者将其存储在应用程序范围的存储中。您可以在这篇文章或原始文章中找到实现。
注:代码在SO中有,这里不再重复代码。如果您的代码未托管在同一个 ASP.NET 应用程序中,或者出于任何原因您不想依赖
Application_BeginRequest
,作为另一种选择,您可以将站点域名存储在一个设置中(例如 app.condig 或 web.config 中的 appsetigs )。 config 如果它是网络应用程序)并在您的代码中使用它。
推荐阅读
- c# - 我创建了一个下载链接。但是下载的文件缺少它的文件类型(每次都下载一个普通文件)
- python - 如何将 RecycleView 实现为可以通过按下按钮更新的局部视图?
- linux - 如何设置'docker logs -t'的时区?
- .net - 向 DataGridView 滚动条添加额外的按钮?
- c# - ASP.NET:GridView 背景颜色不会在自定义事件上更改
- php - How to calculate cumulative sum in PHP?
- environment-variables - In Unreal Engine editor, how to specify paths relative to the project folder root?
- amazon-ecs - 可以通过 EC2 实例元数据发现 ENI IP 地址吗?
- algorithm - 有没有针对“洪水问题”的有效算法?
- mysql - equi join 的 MySQL 语法错误