后,我以前的帖子,这里是另外一个。请求头值提供者
这是一个完全无用的要求:添加一个值的供应商,将让您使用无调用HttpContext.Current.Request(或同样不能接受的东西)在您的行动,请求头。其实,这是荒谬的简单,因为我们已经有了一个方便的基类,NameValueCollectionValueProvider,需要一个集合,它的价值,并提供给不知情的控制器。因此,它的代码很简单:public class RequestHeaderValueProvider : NameValueCollectionValueProvider {
public RequestHeaderValueProvider(ControllerContext controllerContext)
: base(controllerContext.HttpContext.Request.Headers,
CultureInfo.CurrentCulture) { }
}
public class RequestHeaderValueProviderFactory : ValueProviderFactory {
public override IValueProvider GetValueProvider
(ControllerContext controllerContext) {
return new RequestHeaderValueProvider(controllerContext);
}
}
注意,我们需要一个ValueProviderFactory再次。而我们需要注册以及在Global.asax:{C}
现在它足够的操作方法参数命名为你需要的头,你会自动获得的价值。为它编写一个测试
因此,我完全不跟你说实话,当我说,这是完全无用的。除了在REST风格的应用程序中使用它,有重定向回邮政重定向获取常规的一部分,主要是得到引荐价值,是一个很常见的需要。因此,我们可以测试两件事情(当然使用{A}):我们有我们作为一个参数的引荐价值,我们实际上是重定向到它。都是集成测试,第二个是测试我们的基础设施和实际行动的方法,但谁在乎:[Test]
public void TestHeaderProvider() {
var request = new WebRequest("/Sample/ActionUsingReferer")
{AutoRedirect = false};
const string previousurl = "/PreviousUrl";
request.Headers["Referer"] = previousurl;
var response = new TestSession().ProcessRequest(request);
Assert.AreEqual(previousurl,
response.ActionMethodParameters["referer"]);
Assert.AreEqual(previousurl,
response.RedirectLocation);
}
公告,我们有,禁用Ivonna Autoredirection功能:没有,我们将测试结果重定向(快速调查:你希望此属性默认为false),而不是原来的请求。请注意,我们使用的是新的MVC功能Ivonna:操作方法参数的能力。
最后,这里的代码,使这个测试高兴:{体C3}
不幸的是,像User-Agent头的名字是不是很C#中友好,所以你可能会修改你的代码,以便能够消耗这些参数命名,说,USER_AGENT头。