内部 Web サーバーを持つアプリケーションを .NET 2.0 から .NET 4.0 にアップグレードしています。
クラスHttpListenerWorkerRequest
を拡張し、 の形式で Url を返すリクエストを作成する object でリクエストを処理しています。HttpWorkerRequest
GetRawUrl()
http://localhost:82/Default.aspx
.NET 2.0 では、これを問題なく送信HttpRuntime.ProcessRequest(httpListenerWorkerRequest)
できますが、.NET 4.0 では、「Bad Request」というテキストしかない Web ページが表示されます。
open をクラックすると、HttpContext を構築しようとするプライベート メソッドであるHttpRuntime
から Bad Requests がスローされていることがわかります。ProcessRequestInternal(HttpWorkerRequest wr)
私はこれを自分で試しました:
try
{
//what's going on?
hcontext = new HttpContext(workerRequest);
}
catch(Exception e)
{
//Debugging break point here
}
更新前 (.NET 2.0)、正常にビルドされ、更新後 (.NET 4.0)、それを示す System.ArgumentException が発生します。
The relative virtual path 'http:/localhost:82/Default.aspx' is not allowed here
、投げられる
at System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)
at System.Web.HttpRequest.get_ClientFilePath()
at System.Web.Security.CookielessHelperClass.RemoveCookielessValuesFromPath()
at System.Web.HttpContext.Init(HttpRequest request, HttpResponse response)
at System.Web.HttpContext..ctor(HttpWorkerRequest wr)
at Talcasoft.Web.Hosting.HttpWorkerThread.Run(Object request) in
C:\[OurLibrary].Web\Hosting\HttpWorkerThread.cs:line 51
これを引き起こす .NET の変更点と、これを回避するにはどうすればよいですか?
編集リクエストの GetRawUrl() は確かに double を返しますが、許可されていない http: の後に double ではなく単一のスラッシュが続くことに気付きました。