2016-12-07 29 views
0

我有一个MVC 5应用程序,其后端的网络API。对于每个请求到我的服务器我需要提供用户代理,我可以在控制器的操作方法得到像var UserAgent = Request.UserAgent.ToString();并且在其它类随后通过像(控制器=>服务=> HttpRequester => XXXHttpClient),最后在实际请求使用在XXXHttpClient类,但我认为可能有更好的方法来实现相同。我试图谷歌它,但没有发现任何相关的,所以任何人都可以指导我什么是最好的做法如果我想直接在XXXHttpClient类中获得用户代理,而不是随后传递。有很多可能的答案的广泛问题的用户代理在MVC 5应用程序

回答

1

点点。

通过所有层传递的数据通常不是一件好事。

我会做的是让一个MVC行为过滤器,抓住用户代理并将其设置为一个对象。对象类可能是这样的:

public class RequestContext 
{ 
    public string UserAgent { get; set; } 
} 

使用您的依赖注入框架注入这个每个请求一次。然后,动作过滤器和依赖于数据的图层将使用相同的实例,从而允许您将数据获取到任何需要它的图层。

它使用一个静态属性的另一种选择:

HttpContext.Current.Request.UserAgent 

更好的性能,更容易阅读,但较低的可测试性:)一次每个请求

+0

意味着行动方法的水平? –

+0

是的,通常DI框架提供了“瞬时”范围,这意味着为每个需要它的对象创建一个实例,“单一”范围表示单个实例由请求它的所有对象共享,“请求”范围表示任何作为单个HTTP请求的一部分创建的对象都会获得相同的实例。在Ninject中,这是'InRequestScope()'。 – juunas

+0

如果可能,请您提供一些代码或参考链接? –