我們得到一個405錯誤和IIS7嘗試應用當出現以下異常的ResponseStreamFilter到HttpResponse.Filter:405(POST不允許)HttpException嘗試應用時HttpResponse.Filter
HttpException:
The HTTP verb POST used to access path '/app/Thing.asmx/Command' is not allowed.
,我們正在申請過濾器通過使用HTTP模塊的代碼是這樣的:
var rfs = new ResponseFilterStream(HttpContext.Current.Response.Filter);
rfs.TransformStream +=
new Func<System.IO.MemoryStream, System.IO.MemoryStream>(ProcessStream);
HttpContext.Current.Response.Filter = rfs;
Log("Response stream filter applied correctly.");
所有的代碼在我們的HttpModule工作得很好......這一切都包裹在一個try-catch只是爲了安全起見,不拋出任何異常,診斷日誌記錄像最後一行abov e工作正常。
但它看起來像我們在上面的代碼中的ProcessStream
方法永遠不會被調用。如果我們將篩選器應用於HttpResponse.Filter
,則IIS會在我們的篩選器開始處理之前拋出405異常。
我們的代碼已經在幾個類似的系統工作過,所以我們懷疑這個特定的服務器上的IIS /機器配置負責。什麼可能導致此?
這種情況下405錯誤最常見的原因似乎是使用Url.Rewrite。 (The HTTP verb POST used to access path '/test.html' is not allowed)但是,我們從來沒有使用Url.Rewrite。
另一個常見的原因是請求URL中的尾部斜線。 (HTTP 405 on Error on HTTP POST IIS ASP .NET)但如上所述,請求的URL不以斜線結尾。
應用程序池是在一個典型的管道(jQuery AJAX post receives 405 error (HTTP verb POST not allowed))運行.NET 4.0,但我們的代碼沒有問題,在許多其他系統下的經典應用程序池中運行,因此仍然必須是唯一的這個東西服務器的配置。更改爲集成管道會中斷我們的代碼正在過濾的應用程序,所以這不是一個可行的解決方法。