asp.net – 在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 作为构建后事件的aspnet_compiler在空MVC
- asp.net – Devexpress网格延迟加载
- asp.net-mvc – 可以在当前使用ASP .NET的Web应用程序中使用
- asp.net – 从代码隐藏更改GridView列属性
- asp.net – GridView RowUpdating无法获取新值
- asp.net – System.DirectoryServices – 服务器不可操作
- asp.net菜单skiplink
- 两个ASP.NET站点共享应用程序文件但具有不同的web.config
- asp.net-mvc – 为“简单”SaaS启动选择ORM(ASP.NET MVC)
- asp.net-mvc-4 – GoogleOauth2问题获取Internal Server 50