에 HttpException 변환 서버와 같이 오류가 발생했습니다 (구체적으로 "잠재적으로 위험한 Request.Path 값이 클라이언트에서 감지되었습니다"HttpException
). 그리고 더 나쁜 것은, 전역 HandleErrorAttribute가이 특별한 "오류"를 보지 못하기 때문에 사용자는 내 사용자 정의 오류 페이지 (Views/Shared/Error.cshtml)를 얻지 못합니다. 그래서 사용자가 일반 "뭔가가 고장 났어요하지만 난 당신에게 그것을 말하지 않을 것입니다, 냐 nya 냐!" 페이지.는 HTTP 404 (페이지를 찾을 수 없음) 응답
이 응답을 변경하여 사용자가 내 사이트의 404 페이지 ("요청한 페이지를 찾을 수 없음")와 비슷하지만 HTTP 400 응답 코드와 유사한 것을 얻고 싶습니다.
내가 말할 수있는 바로는이 예외를 처리하려고하는 유일한 곳은 Global.asax Application_Error 루틴입니다. (내 사용자 지정 전역 HandleErrorAttribute는 예외가 표시되지 않습니다.)
어떤 도움이나 지침 (또는하지 말아야 할 일을 시도 할 때 날카로운 손목)은 인정 될 것입니다! 참고로
, 여기에 기존의 Global.asax 코드 :
/// <summary> Handle "page not found" (HTTP 404) errors. </summary>
protected void Application_EndRequest()
{
// This code is from: http://stackoverflow.com/a/9026941/1637105
if (Context.Response.StatusCode == 404) {
Response.Clear();
var rd = new RouteData();
rd.DataTokens["area"] = "AreaName"; // In case controller is in another area
rd.Values["controller"] = "Errors";
rd.Values["action"] = "NotFound";
IController c = new ErrorsController();
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
}
}
protected void Application_Error(object sender, EventArgs e)
{
// Convert "A potentially dangerous Request.Path value was detected from the client" to an HTTP 404 (page not found) response
var ex = Server.GetLastError();
if (ex != null && ex is HttpException) {
var re = new Regex(@"(?ix: \b potentially \b.+?\b dangerous \b.+?\b value \b.+?\b detected \b.+?\b client \b)");
if (re.IsMatch(ex.Message)) {
// <Convert the response to 404>
}
}
}
편집 :
내가 ELMAH 최대 행복 유선 것을 추가해야합니다, 그래서 일주일 때 이메일을 여러 번 가져 나쁜 사람은이 모든 운동 내가 ELMAH 이메일을 억제하기로 결정에 대해 온
/w00tw00t.at.blackhats.romanian.anti-sec:)
내 사이트를 핑 (ping), 나는 것을 발견 "위험"를 포함하는 일이 더 양성 요청 문자로 인해 사용자가 내 웹 사이트처럼 보이지 않는 정말 못 생기는 웹 페이지가 표시됩니다.
elmah 이메일을 쉽게 삭제하는 것은 쉽습니다. Application_Error 루틴의 오류를 감지하여 올바른 방향으로 가고 있는지 묻는 것 같아요. 그렇다면 해당 루틴에서 수행 할 합리적으로 적절한 작업은 무엇입니까?
본 적이 있습니까? http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net-mvc –
제공된 URL과 같은 URL을 사용하면 나는'HTTP 400 '을 얻는다. 그게 당신이 얻는 것입니까? –
@RowanFreeman 좋아, 그래서 방금 배웠습니다. 고마워요! 네, 기술적으로 404 (발견되지 않음)보다 정확한 400 (잘못된 요청 구문)이 표시됩니다. 하지만 악의적이지 않은 사용자는 요청한 페이지가 존재하지 않는다는 사실을 알고 싶어합니다. 그는 요청이 구문 상 올바르지 않다고 신경 쓰지 않습니다. OTOH, 나쁜 사람들은 정기적으로 가짜 요청으로 내 사이트를 핑합니다. 404가 아니라 404를 반환하면 내가 위험한 URL에 대해 경계하지 않고 내 사이트에 더 많은 관심을 기울일 것을 권장합니다. –