How can I get the url from the business logic layer?
我在一个C项目中有一个业务逻辑层,我需要找到一种基于运行网站的基本URL生成URL的方法。
例如,这是URL:http://localhost:56240/management/quick.aspx?QuiID=46
我需要一种方法来获得这一部分:http://localhost:56240,使用业务逻辑层的C代码(意味着我不能使用请求对象或context.request)。
有办法吗?
- 在某种程度上,如果您正在处理一个请求,那么您必须能够访问httpcontext。在那里获取上下文,然后将所需的任何值作为值类型传递给bl,这样bl就不会接触到httpcontext。
- 可能重复stackoverflow.com/questions/40680/…
- 我知道当我有权访问httpcontext/请求时如何获取URL。但是有没有一种方法可以在没有任何访问权限的情况下获得它呢?
- 这就是Frenchie说的-把它传递给业务层。这就是划分层次的关键所在。)
在类中,可以使用httpcontext.current属性(在system.web.dll中)。从那里,您也可以使用请求对象。例如
1 2
| HttpRequest request = HttpContext.Current.Request;
string url = request.Url.Authority.ToString(); |
别忘了在你的课堂上包括System.Web的参考资料。
- 它的效果很好,10倍:-)
- 这当然是一种方法,但现在您的BLL中存在与System.Web的紧密依赖/耦合问题,这意味着无论应用程序(即Web或服务或Windows服务等)的上下文如何,BLL都不可完全重用,而且通过访问BLL中的System.Web程序集,它更容易执行"Webby"操作。相反,我将在UI中创建一个助手类,该类只获取URL并将其传递到BLL中,以便它返回或返回任何内容。
从表示层调用方法,将HttpContext传递到业务逻辑层,可以使用HttpContext.Request.Url.Authority获取域http://localhost:56240。
或者,如果在HttpContext中不需要其他东西,可以直接将Request.Url.Authority作为字符串传递给方法。
- 我知道当我有权访问httpcontext/请求时如何获取URL。但是有没有一种方法可以在没有任何访问权限的情况下获得它呢?
- 硬编码,至少我不知道任何其他的方法,你可以得到你的网络域没有一个Page.Context。@Liranfriedman为什么你不需要它