如何从业务逻辑层获取URL?

4

1
在某些情况下,如果您正在处理请求,您必须访问HttpContext。在那里获取上下文,然后将您需要的任何值作为值类型传递给BL,以便BL不会接触HttpContext。 - frenchie
可能是重复问题 https://dev59.com/73VD5IYBdhLWcg3wQJKT - The Reason
当我可以访问HttpContext / Request时,我知道如何获取URL。但是如果没有任何访问权限,有没有办法获取它? - Liran Friedman
这就是frenchie说的 - 只需将其传递到业务层。这就是分离层的全部意义 :) - Luaan
3个回答

4

从您的类中,您可以使用 HttpContext.Current 属性(在 System.Web.dll 中)。从那里,您也可以使用 Request 对象。例如:

HttpRequest request = HttpContext.Current.Request;
string url = request.Url.Authority.ToString();

不要忘记在你的类中包含 System.Web 的引用。

2
这当然是一种方法,但现在您的BLL与System.Web存在紧密的依赖/耦合问题,这意味着BLL无论应用程序的上下文(即Web或服务或Windows服务等)如何,都不是完全可重用的,并且更容易通过在BLL中访问System.Web程序集来执行“Webby”操作。相反,我会在UI中创建一个帮助类,该类仅获取URL并将其传递到BLL中,以便它可以返回或执行其他操作。 - Ahmed ilyas
但是如果我们在API中使用ConfigureAwait(false);HttpContext可能为空。 - Farhad Zamani

0

从表示层调用方法并将HttpContext传递到业务逻辑层,您可以使用HttpContext.Request.Url.Authority来获取您的域名http://localhost:56240

或者,如果您不需要HttpContext中的其他内容,您可以直接将Request.Url.Authority作为字符串传递给您的方法。


当我可以访问HttpContext / Request时,我知道如何获取URL。但是如果没有任何访问权限,有没有办法获取它? - Liran Friedman
зҰ¬зә–з ЃпәЊи‡іе°‘我дёҚзџӨйЃ“е…¶д»–ж–№еәЏеЏҮд»ӨењЁжІҰжњ‰Page.Context的情况下иҺ·еЏ–ж‚Ёзљ„зҢ‘еџџгЂ‚@LiranFriedmanдёғд»Ђд№€дҢ йњЂи¦Ѓе®ѓиЂЊжІҰжњ‰д»»дҢ•и®үй—®жқѓй™ђпәџ - Yu Yenkan

0
其中一种解决方案是从逻辑层返回URL路径,即不包含主机。然后在控制器层级别附加主机。
来自逻辑层。
return new LogicResponseObject() {
...
Path = "/test/path/"
...
};

在控制器/网络/服务层

HttpRequest request = HttpContext.Current.Request; //Get request object
string authority = request.Url.Authority; //http://www.example.com
string url = authority + logicResponseObject.Path; //http://www.example.com/test/path/

这样逻辑将与HTTP上下文对象解耦。


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