我不知道如果這正是你想要的,但在一般情況下,你應該能夠在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