C# 重定向URI不能包含换行符。(查询字符串)

C# 重定向URI不能包含换行符。(查询字符串),c#,asp.net-mvc,query-string,global-asax,C#,Asp.net Mvc,Query String,Global Asax,我遇到这个错误,重定向URI不能包含新行字符。当运行下面的代码时。我正在使用MVC4。她的是我的工作代码 protected void Application_Error(Object sender, System.EventArgs e) { System.Web.HttpContext context = HttpContext.Current; System.Exception exception =

我遇到这个错误,重定向URI不能包含新行字符。当运行下面的代码时。我正在使用MVC4。她的是我的工作代码

 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();
        }

消息很清楚:查询字符串中有一个新行。放置一个断点并快速观察结束行,以找到新行的位置并修复它

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

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);

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

UrlHelper.Encode(exception.Message)
试试这个代码

我想。您的文件名为null,或Url字段。所以它很混乱,并显示错误。现在我刚更改了代码,请参见粗体行

编辑

您的查询字符串格式错误<代码>请将(逗号)改为&(和)


您需要使用HttpUtility或UrlHelper对异常消息进行URL编码

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));

您是否尝试过发送的每个可以是字符串的参数?是的。现在请再看一次我的问题。这个错误被解决了。但所有值都由errorMessage参数发送,其他参数为空。为什么错误消失了。但我在错误消息参数中获得了所有详细信息。其他参数返回null。为什么?您的查询字符串格式错误。现在将(逗号)改为&(和)。这个错误被解决了。但所有值都由errorMessage参数发送,其他参数为空。你为什么要为此提出一个新问题。然而,我一点也不喜欢您的异常处理策略,我宁愿将所有数据写入错误日志或数据库表,并用一条简单的消息重定向到错误页面,通知发生了错误。用户不应该被这些技术细节和其他可能的安全问题所困扰。好吧,对不起!但同一个话题我有两个问题,所以我问了。很抱歉
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));