我收到此错误重定向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();
}
答案 0 :(得分:6)
您需要使用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));
答案 1 :(得分:0)
消息很明确:您的查询字符串中有一个新行。放置一个断点并快速观察一下该行,找到新行的位置并进行修复。
否则此代码可能会解决问题:
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);
答案 2 :(得分:0)
错误消息可能不仅包含换行符,还包含其他一些格式。 在作为查询字符串参数发送之前,您需要对其进行编码:
UrlHelper.Encode(exception.Message)
答案 3 :(得分: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();
}