加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在Response.RedirectToRoute之后跳过页面执行的正确

发布时间:2020-12-16 04:07:56 所属栏目:asp.Net 来源:网络整理
导读:我正在使用新的路由功能编写asp.net 4.5应用程序.我有一个页面显示有关项目的一些信息.在Page_Load事件中,我检查路由数据(项目ID)和用户权限,如果某些内容不正确(例如,id用于删除的项目),我使用Response.RedirectToRoute将它们发送到包装,直接回到主页.不要
我正在使用新的路由功能编写asp.net 4.5应用程序.我有一个页面显示有关项目的一些信息.在Page_Load事件中,我检查路由数据(项目ID)和用户权限,如果某些内容不正确(例如,id用于删除的项目),我使用Response.RedirectToRoute将它们发送到包装,直接回到主页.不要通过GO,不要收200美元.

这是完全合理的,直到我尝试访问已删除的项目而不是主页我得到一个错误页面.我做了一些挖掘,发现即使在我使用RedirectToRoute(与标准的Redirect方法不同)之后,页面的其余部分代码为continues to execute,这至少看起来很浪费(因为我只是要扔掉结果)并抛出错误当必要的数据不存在时.

我做了一点SO挖掘,发现了令人难以置信的evil,即Response.End().它做了我需要的,但即使是MSDN page也告诉我,Response.End是一个古老被诅咒的语言的私生子,不适合看到白天的光.主要的反对意见似乎是Response.End抛出一个异常,这对性能有害.我不是最有经验的开发人员,所以我完全不了解这个问题,但我很难相信抛出异常比加载整个网页更加昂贵. workarounds对于如此简单的任务来说似乎相当复杂和过度,特别是因为大多数页面需要某种有效性检查.

在这种情况下我该怎么办?使用Response.End并请求原谅我的傲慢?凑齐一些丑陋的解决方法?或者我对这个问题的看法是错误的开始?我真的很想知道.

更新:现在我已经考虑了一点,我想知道我是否对这个问题有错误的观点.也许立即重定向不是对用户体验的最佳响应.我最好不要在面板中包装所有控件,并使用这样的东西?

Private Sub Page_Init(sender As Object,e As EventArgs) Handles Me.Init
    'Validation Code
    If notValid Then
        ControlsPanel.Visible = false
        ErrorPanel.Visible = true
    End If
End Sub

解决方法

我可能会因为没有直接回答问题而走出困境,但我喜欢看到有关用户体验的更新.我更喜欢你建议的做法.

我喜欢给id无效的410错误并将其扩展一下(从C#翻译):

Protected Sub ItemDoesNotExist()
'item does not exist,serve up error page
ControlsPanel.Visible = False
ErrorPanel.Visible = True

'add meta tags for noindex
Dim mymeta As New HtmlMeta()
mymeta.Name = "robots"
mymeta.Content = "noindex"
Page.Header.Controls.Add(mymeta)

'RESPOND WITH A 410
Response.StatusCode = 410
Response.Status = "410 Gone"
Response.StatusDescription = "Gone"
Response.TrySkipIisCustomErrors = True
'important for IIS7,otherwise the Custom error page for 404 shows.
Page.Title = "item gone"
End Sub

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读