我不知道如果这正是你想要的,但在一般情况下,你应该能够在HttpContext.Current.Request
欺骗的UrlReferer
属性(即使它只读)的值用位的反射。
例如:
FieldInfo fi = HttpContext.Current.Request.GetType().GetField("_referrer", BindingFlags.NonPublic | BindingFlags.Instance);
string initialReferer = HttpContext.Current.Request.UrlReferrer.ToString();
if (fi != null)
fi.SetValue(HttpContext.Current.Request, new Uri("http://example.com"));
string fakedReferer = HttpContext.Current.Request.UrlReferrer.ToString();
在VS;这些都是值UrlReferrer前和后的变化:
initialReferer
"http://localhost/Test/Default.aspx"
fakedReferer
"http://example.com/"
如果您打开使用ILSpy System.Web程序集,你会发现,UrlReferrer属性看起来是这样的:
public Uri UrlReferrer
{
get
{
if (this._referrer == null && this._wr != null)
{
string knownRequestHeader = this._wr.GetKnownRequestHeader(36);
if (!string.IsNullOrEmpty(knownRequestHeader))
{
try
{
if (knownRequestHeader.IndexOf("://", StringComparison.Ordinal) >= 0)
{
this._referrer = new Uri(knownRequestHeader);
}
else
{
this._referrer = new Uri(this.Url, knownRequestHeader);
}
}
catch (HttpException)
{
this._referrer = null;
}
}
}
return this._referrer;
}
}
你的意思[ WebRequest.Create](http://msdn.microsoft.com/en-us/library/0aa3d588.aspx)发送请求,而不是ASP.NET?或者,您是否在未实际通过Web请求的情况下对您的页面进行单元测试,即您需要模拟上下文类以便修改它们? – Rup
嗯,我想我会使用ASP.NET来执行某种“直通”请求,即当我访问我的测试页时,它只是在将请求传递到另一个页面之前操纵引用者。如果我可以用WebRequest来做到这一点,那么你的问题的答案是“是”! – Widor