확실하지가 이 올바른 방향으로 도움이 될 수 있지만, 난 그냥이 사용
[AttributeUsage(AttributeTargets.Class)]
public class ErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
readonly BaseController _bs = new BaseController();
public virtual void OnException(ExceptionContext fc)
{
var model = new errors
{
stacktrace = fc.Exception.StackTrace,
url = fc.HttpContext.Request.RawUrl,
controller = fc.RouteData.GetRequiredString("controller"),
source = fc.Exception.Source,
errordate = DateTime.Now,
message = fc.Exception.Message//,
//InnExc = String.IsNullOrEmpty(fc.Exception.InnerException.ToString()) ? fc.Exception.InnerException.ToString() : ""
};
var message = "<html><head></head><body><h2>An error occured on " + _bs.GetKeyValue<string>("Mobile Chat App") + ".</h2>";
message += "<strong>Message:</strong> <pre style=\"background-color:#FFFFEF\"> " + model.message + "</pre><br />";
message += "<strong>Source:</strong> <pre style=\"background-color:#FFFFEF\">" + model.source + "</pre><br />";
message += "<strong>Stacktrace:</strong><pre style=\"background-color:#FFFFEF\"> " + model.stacktrace + "</pre><br />";
message += "<strong>Raw URL:</strong> <pre style=\"background-color:#FFFFEF\">" + model.url + "</pre></br />";
message += "<strong>Inner Exception:</strong> <pre style=\"background-color:#FFFFEF\">" + model.InnExc + "</pre></br />";
message += "<strong>Any Form values</strong>: <pre>" + fc.HttpContext.Request.Form + "</pre><br />";
message += "</body></html>";
fc.ExceptionHandled = true;
fc.HttpContext.Response.Clear();
fc.HttpContext.Response.StatusCode = 500;
fc.HttpContext.Response.TrySkipIisCustomErrors = true;
_bs.SendErrorMail(message);
fc.ExceptionHandled = true;
//var res = new ViewResult { ViewName = "error" };
//fc.Result = res;
fc.HttpContext.Response.Redirect("/ErrorPage");
//fc.HttpContext.Response.RedirectToRoute("error",new{controller="Home",action="ErrorPage"});
}
나는 Gmail은 오류가 난에 모든 오류를 던져, 아무것도 내가 할 사이트와 잘못되면 알려 수 있다는 계정이,이 있습니다 정보로 아직 나를 실망시키지 않았다. 나는 내가 요즘 다른 방법을 사용할 때, 크게와이에 보였지만되지 않은 :
fc.HttpContext.Request.RawUrl,
그냥 HttpContext를, 당신은 HttpContext를 잡고해야합니까, 내가 가서 fc.HttpContext의 URL을 사용하여 .Request.Form을 사용하면 오류의 원인이 될 수있는 모든 양식 데이터를 가져올 수 있습니다.
이것은 사용자가 요청한 것과 같은 응답이 아니지만 응답이 아닌 요청하는 동안 오류를 잡아 내기 때문입니다! 그런 다음 응답을 지우고 (오류 500) 키보드로 원숭이의 멋진 그림이있는 내 페이지로 리디렉션하여이를 대체합니다.
기본 오류가 준비하는 모든 것이 예외에 포함되지 않습니다. 너는하지만 지금은이 길을 갔다. 아무도 더 나은 답변을 곧 제공하지 않으면 나는 당신의 것을 받아 들일 것입니다 ... – ChrFin
그래,하지만 위의 나는 기본적으로 내 이메일에 YSOD를 줄만큼 많이 사용한다. 정말 다른 것을 위해 try/catch와 함께 사용하고 전자 메일 컴파일러에 예외를 보내서 트릭을 놓칠 수 없도록 배웠습니다. 좋은 팁은 브라우저 유형을 포함하는 것이 었습니다. 이것이 내가 발견 한 버그를 발견하는 데 도움이되었습니다. 블랙 베리 브라우저에만 해당 – davethecoder