この URL を適切に処理して 404 を返そうとしています: http://localhost:2867/dd./xml (スラッシュの前のドットに注意してください)
私の現在の実装では、Application_Error で 4 つの例外/エラーが発生します。Server.GetLastError() によって返される最初の例外は System.Web.HttpException で、次の 3 つは null です。
この問題を再現するために、最低限の実装を行いました。global.asax.cs のコードは次のとおりです。
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Server.ClearError();
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Generic");
routeData.Values.Add("area", "");
IController errorController = new ErrorController();
// this line throws System.Web.HttpException is a view is returned from ErrorController
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
エラー コントローラは次のようになります。
public class ErrorController : Controller
{
public ActionResult Generic()
{
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View();
// returning content rather than a View doesn't fire 'System.Web.HttpException' in Application_Error
//return Content("Some error!");
}
}
2 つの問題があります。1 つは、Application_Error の 1 つのエラーではなく、指定された URL に対して 3 または 4 を取得することです。もう 1 つは、ErrorController からビューを返すときに、Application_Start の Execute 呼び出し行で例外がスローされることです。代わりに Content("something") が返された場合、この内部 (MVC と思われる) 例外はトリガーされません。
問題を確認するには、デバッグ モードにして開発サーバーを使用する必要があります。IIS または IIS Express を使用すると、何らかの理由でエラーがキャッチされません。また、時々これらのエラーはなくなります。最初に戻すには、ソリューションをきれいにする必要があります。
試してみたい場合は、最低限の解決策を次に示します: http://dl.dropbox.com/u/16605600/InvalidUrl.zip
ご協力ありがとうございました!