我有一个MVC 5应用程序,其后端是Web API。对于我的服务器的每个请求,我需要提供用户代理,我可以在控制器操作方法中获取var UserAgent = Request.UserAgent.ToString();
,然后在其他类中传递,如( Controller => Service => HttpRequester => XXXHttpClient )最后在 XXXHttpClient 类的实际请求中使用,但我认为可能有更好的方法来实现相同的目标。我试图谷歌它,但没有找到任何相关的,所以任何人都可以指导我什么是最好的做法如果我想直接在XXXHttpClient类中获取用户代理而不是随后传递。
答案 0 :(得分:3)
一个广泛的问题,有很多可能的答案。
将数据传递到所有图层通常不是一件好事。
我要做的是制作一个MVC动作过滤器,它抓取用户代理并将其设置为一个对象。对象类可以是这样的:
public class RequestContext
{
public string UserAgent { get; set; }
}
使用您的依赖注入框架为每个请求注入一次。然后,动作过滤器和依赖于数据的图层将使用相同的实例,允许您将数据提供给需要它的任何图层。
另一个使用静态属性的选项:
HttpContext.Current.Request.UserAgent
性能更高,更易于阅读,但可测试性更低:)