我在THIS之后为我的MVC 4应用程序实现了一个错误处理程序 现在我正在为所有错误做同样的事情,不仅404而且我想得到原始响应,保存它用于记录或显示它,如果它在调试模式,因为它包括有用的信息,如完整的堆栈跟踪,小显示在哪里错误发生的代码等等。
我现在正忙着在调用Response
之前从Response.Clear()
对象中获取缓冲的repsonse数据,但无法弄清楚如何。
如何获取HttpResonse对象的内容?
对于HttpWebResponse
,可以使用GetResponseStream()
方法,我找到了很多示例,但HttpResonse
和OutputStream
没有任何内容可以不读......
答案 0 :(得分:1)
不确定这是否有助于正确的方向,但我只是使用它:
[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,我使用get和fc.HttpContext.Request.Form的URL来获取可能导致错误的任何和所有表单数据。
这不是你问的回复,但这是因为我在请求期间捕获错误,而不是响应错误!然后我清除响应(将是一个错误500)并将其替换为重定向到我的页面,其中有一张带键盘的猴子的漂亮照片: - )