在我的global.asax页面中,我有以下代码:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
server.transfer("err.aspx")
End Sub
Run Code Online (Sandbox Code Playgroud)
它不起作用,我得到以下错误:对象引用未设置为对象的实例.
提前致谢
我避免使用默认的ASP.NET方法来重定向错误(就像许多人一样).清洁AJAX代码和SEO是原因之一.
但是,我正在使用以下方法来执行此操作,似乎我可能会HttpContext.Current.Items在转移中丢失?
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="401" />
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="401" responseMode="ExecuteURL" path="/Account/SignIn" />
<error statusCode="403" responseMode="ExecuteURL" path="/Site/Forbidden" />
<error statusCode="404" responseMode="ExecuteURL" path="/Site/NotFound" />
<error statusCode="500" responseMode="ExecuteURL" path="/Site/Error" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
我认为它只是执行了一个Server.Transfer()封面,我理解保留Items.(参见:HttpContext.Current.Items的范围和http://weblog.west-wind.com/posts/2010/Jan/20/HttpContextItems-and-ServerTransferExecute)
但是我也在Items"ExecuteURL"之前捕获了一些内容,并在转移之后检索/输出它(或者它是什么),它似乎消失了.我已经看到它进入Items集合,我看到Count加注到5,然后当检索到值时,集合中只有2个项目.
到底是怎么回事?
如果你想更多地了解我正在做的事情并推荐一个替代实现,我愿意接受它.我正在使用它以一种没有竞争条件的方式将ELMAH Error Id推送到ViewModel中.(即我正在替换的常见解决方法是仅显示最近的错误.)这是我的代码:
Global.asax中
protected void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args) {
ElmahSupplement.CurrentId = args.Entry.Id;
}
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) {
if (ElmahSupplement.IsNotFound(e.Exception)) …Run Code Online (Sandbox Code Playgroud) 我有一个.ashx处理程序,根据处理过程,在完成处理后会重定向到成功或错误页面.处理程序在我的站点中,但成功或错误页面可能不是(这是用户可以配置的).
有没有什么方法可以将错误详细信息传递给错误页面而不将其放在查询字符串中?
我试过了:
Response.Redirect是标头,标头会被清除Server.Transfer,而不是Response.Redirect,但这不适用于不在我的网站中的网址我知道我可以在查询字符串中传递数据,但在某些情况下,我需要传递的数据对于查询字符串来说可能太长了.我还有其他选择吗?
我正在使用此代码...
Server.Transfer("/Student/StudentControlPanel.aspx?username=" + username);
Run Code Online (Sandbox Code Playgroud)
并得到以下例外:
InvalidOperationException : "Failed to map the path '/Student/StudentControlPanel.aspx'."
Run Code Online (Sandbox Code Playgroud)
StudentControlPanel.aspx - 页面位于
App Root -> Web -> Student
Run Code Online (Sandbox Code Playgroud)
但我的.sln文件位于
App Root -> Solution
Run Code Online (Sandbox Code Playgroud)
Default.aspx 在...
App Root -> Web
Run Code Online (Sandbox Code Playgroud)
有谁能给我一个解决方案?
我有一个页面,根据某些条件我要么做Response.Redirect或Server.Transfer.现在我想为两个案例添加一个标题.所以我正在做以下事情
Response.AddHeader("Vary", "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
Run Code Online (Sandbox Code Playgroud)
现在,当代码通过Server.Transfer代码路径时,Vary标头设置为*,而当它通过Response.Redirect时,标头正确设置为User-Agent.
为什么会发生这种情况?如何为两种情况设置响应标头相同?
如何使用Server.Transfer("default.aspx")了更好的性能用于导航中的网站.当我使用它时,它不会更改地址栏中的URL.如何通过server.transfer实现新的URL.或(如果不是),我怎么能获得性能与 Response.Redirect("default.aspx").
我知道Server.Transfer()应该用于重定向到同一服务器上的另一个".aspx"页面.但是为什么我不应该使用这种方法重定向到另一个服务器或html页面上的aspx页面的原因是什么?你的答案非常贴切.
我有两个aspx页面,第一个有5个链接.所有5个链接都使用Server.transfer("page_x.aspx");
我的问题是,一旦传输完成,我就会留下原来的5个链接和新数据.如何清除原始页面的内容,然后从单击的链接加载新数据?我尝试使用Controls.Clear();然后发出一个Server.transfer但是没有用.
哪一个更好,Server.Transfer还是Response.Redirect?我正在寻找一些解释.
我在服务器类下面有一个红色下划线:
Server.Transfer("~/PostEdit.aspx");
Run Code Online (Sandbox Code Playgroud)
错误是:
无法通过嵌套类型"AnswerQuestion.ThreadTable"访问外部类型"System.Web.UI.Page"的非静态成员
AnswerQuestion是部分类,ThreadTable是我创建的自定义类.
server.transfer ×10
asp.net ×8
c# ×4
.net ×1
asp.net-mvc ×1
elmah ×1
global-asax ×1
http-headers ×1
httpcontext ×1
performance ×1
query-string ×1