2011-08-04 20 views
3

私のelmahログを調べると、「長すぎるURL」リクエストが引き続き受信されています。エラーは次のとおりです。ここでAsp.Net MVC:URLが長すぎてエラー処理が要求されました

System.Web.HttpException (0x80004005): The length of the URL for this request exceeds the configured maxUrlLength value. 
    at System.Web.HttpRequest.ValidateInputIfRequiredByConfig() 
    at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context) 

は私が受け取る要求の一種である:

/index.php/blog/post/the_ten_deceptions_of_the_datetimepicker/+[PLM=0]+GET+http:/www .visualhint.com/index.php/blog/post/the_ten_deceptions_of_the_datetimepicker/+ [0,23778,23037] + - + [N] + POST + http:/www.visualhint.com/index.php/blog/post/ the_ten_deceptions_of_the_datetimepicker/+ [0,0,2007]

(... asp.net MVCサイトされる前に、PHPの事で驚かないでください、私のサイトこれらを生成することがありました何

  1. PHPでいたし、今私は、URLが/index.php/blog/post/the_ten_deceptions_of_the_datetimepickerで停止したときによく働く私の新しいURL形式、古いURLのこの種をリダイレクトする必要があります)

    リクエスト?それは悪意のあると思われますか?

  2. 私はカスタムエラー設定をしていますが、そのようなリクエストは私のカスタムエラーページにリダイレクトされますが、そうではありません。代わりに、人々は典型的な黄色の画面を取得します(これは400 Bad Requestです)。上記のスタックトレースを見ると、非常に短く、非常に早く例外がキャッチされているようです(Application_BeginRequestは呼び出されていません)。このような例外が発生した場合、私のカスタムエラーページを表示することは可能ですか、少なくとも私のホームページにリダイレクトできますか?

私は私のweb.configファイルにエラー400のための行を追加してみました:

<customErrors mode="RemoteOnly"> 
    <error statusCode="400" redirect="/" /> 
</customErrors> 

これはホームページの右側にリダイレクトするが、それはaspxerrorpathクエリ文字列値に完全なURLを追加します。

ありがとうございました。

+0

アドバイスはここに役立ちます:http://stackoverflow.com/questions/1185739/asp-net-mvc-url-routing-maximum-path-url-length –

答えて

1

Google検索は、他の人がこのような要求を受けるのを助けてくれました。誰かが次のように回答しました:

私はスパムを送信する自動化された方法だと確信しています。このような ジューシーなトレイルを参照元フィールドに残すべきではないので、構成にはエラーがある必要があります。

まず、それはそれは(直接最初 を取得せずにPOSTでスパムをブロックするのは簡単です) にURLを投稿するように指示し、URLを取得するには、いくつかのスクリプトに指示します。

この数字は、投稿するスパムメッセージに関連している可能性があります( をスパムDBのインデックスとして考える)。

したがって、これらの要求は通常のリンクに従った人間からのものではない可能性が高いので、私は以下の解決策に終わりました。(呼び出し側がタイムアウトを持っているでしょう

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    HttpException hExc = e.Exception.GetBaseException() as HttpException; 
    if (hExc != null) 
    { 
     if (hExc.ErrorCode == unchecked((int)0x80004005)) 
     { 
      e.Dismiss(); 
      return; 
     } 
    } 

    // Here I do some stuff if the error has to be logged. 
} 

void Application_Error(object sender, EventArgs e) 
{ 
    Exception exc = Server.GetLastError(); 
    HttpException hExc = exc as HttpException; 
    if (hExc != null) 
    { 
     if (hExc.ErrorCode == unchecked((int)0x80004005)) 
     { 
      Uri uri = HttpContext.Current.Request.Url; 

      Response.Clear(); 
      Response.StatusCode = 404; 
      Response.End(); 

      Server.ClearError(); 
     } 
    } 
} 

代わりに404コードを返すので、私は応答を送信しないことが好ましいだろう:これは私ELMAHログを汚染し、これは404のコードと、呼び出し側に空白のページがあります回避します)asp.netで可能ですか?考えていません...

関連する問題