5

我收到此错误重定向 URI 不能包含换行符。当运行下面的代码时。正在工作MVC 4。她的是我的工作代码。

 protected void Application_Error(Object sender, System.EventArgs e)
            {
                System.Web.HttpContext context = HttpContext.Current;
                System.Exception exception = Context.Server.GetLastError();
                var stackTraceExcep = new StackTrace(exception, true); // create the stack trace
                var stackTrace = stackTraceExcep.GetFrames()         // get the frames
                              .Select(frame => new
                              {                   // get the info
                                  FileName = frame.GetFileName(),
                                  LineNumber = frame.GetFileLineNumber(),
                                  ColumnNumber = frame.GetFileColumnNumber(),
                                  Method = frame.GetMethod(),
                                  Class = frame.GetMethod().DeclaringType,
                              }).FirstOrDefault();


                string FileName = stackTrace.FileName;
                string LineNumber = stackTrace.LineNumber;
                string ColumnNumber = stackTrace.ColumnNumber;
                string MethodName = stackTrace.Method.Name;
                string ClassName = stackTrace.Class.Name;
                if (!string.IsNullOrEmpty(exception.Message))
                {
                    Response.Redirect(String.Format("~/Error/{0}/?errorMessage={1},FileName={2},LineNumber={3},ColumnNumber={4},MethodName={5},ClassName={6}", "App_Error", exception.Message, FileName, LineNumber, ColumnNumber, MethodName, ClassName));//I got this error in this line 
                }
                context.Server.ClearError();
            }

什么问题 ?我们如何解决这个问题?我已经搜索并尝试了谷歌并得到了一些堆栈溢出的答案。但任何事情都对我没有帮助。

现在我该怎么办?

我的控制器操作方法

[HttpGet]
        public ActionResult App_Error(string errorMessage, string fileName, string lineNumber, string columnNumber, string methodName, string className)
        {
            string errorNumber = Convert.ToString(errorRepository.AddError(errorMessage, fileName, Convert.ToInt32(lineNumber), Convert.ToInt32(columnNumber), methodName, className));
            ViewData["message"] = "An error has occurred in the application . The error number is : " + errorNumber;
            return View();
        }
4

5 回答 5

10

您需要使用 HttpUtility 或 UrlHelper 对异常消息进行 URLEncode

HttpUtility.UrlEncode(exception.Message)

如下更改您的重定向行

Response.Redirect(String.Format("~/Error/{0}/?errorMessage={1},FileName={2},LineNumber={3},ColumnNumber={4},MethodName={5},ClassName={6}", "App_Error", HttpUtility.UrlEncode(exception.Message), FileName, LineNumber, ColumnNumber, MethodName, ClassName));
于 2014-09-04T14:08:54.847 回答
0

试试这个代码

我认为 。您的文件名是 null 或 Url 字段。所以它很困惑并显示错误。现在我刚刚更改了您的代码,请参见粗线。

编辑

而且您的查询字符串格式错误。Please Change ,( comma) to & (and)

 protected void Application_Error(Object sender, System.EventArgs e)
        {
            System.Web.HttpContext context = HttpContext.Current;
            System.Exception exception = Context.Server.GetLastError();
            var stackTraceExcep = new StackTrace(exception, true); 
            var stackTrace = stackTraceExcep.GetFrames()         
                          .Select(frame => new
                          {                   // get the info
                              FileName = frame.GetFileName(),
                              LineNumber = frame.GetFileLineNumber(),
                              ColumnNumber = frame.GetFileColumnNumber(),
                              Method = frame.GetMethod(),
                              Class = frame.GetMethod().DeclaringType,
                          }).FirstOrDefault();


            **string FileName = !string.IsNullOrEmpty(stackTrace.FileName) ? Server.UrlEncode(stackTrace.FileName) : "";**
            string LineNumber = stackTrace.LineNumber.ToString();
            string ColumnNumber = stackTrace.ColumnNumber.ToString();
            string MethodName = stackTrace.Method.Name;
            string ClassName = stackTrace.Class.Name;
            if (!string.IsNullOrEmpty(exception.Message))
            {
                Response.Redirect(String.Format("~/Error/{0}/?errorMessage={1}&fileName={2}&lineNumber={3}&columnNumber={4}&methodName={5}&className={6}", "App_Error", exception.Message, FileName, LineNumber, ColumnNumber, MethodName, ClassName));

            }
            context.Server.ClearError();
        }
于 2013-08-22T13:00:57.060 回答
0

错误消息可能不仅包含换行符,还包含一些其他格式。您需要在作为查询字符串参数发送之前对其进行编码:

UrlHelper.Encode(exception.Message)
于 2013-08-22T12:27:58.150 回答
0

您也可以使用 (asp.net) 中的 Session 或 MVC 中的 tempdata 来做同样的事情

于 2021-09-22T08:34:19.193 回答
-1

消息很清楚:您的查询字符串中有一个新行。放置一个断点并在违规行上快速查看以查找新行的位置并修复它。

否则此代码可能会解决问题:

String.Format("~/Error/{0}/?errorMessage={1},FileName={2},LineNumber={3},ColumnNumber={4},MethodName={5},ClassName={6}", "App_Error", exception.Message, FileName, LineNumber, ColumnNumber, MethodName, ClassName).Replace(@"\r\n", string.Empty);
于 2013-08-22T12:27:51.053 回答