asp.net根据参数找不到记录后响应404及显示错误页
程序员文章站
2022-05-14 08:26:13
在asp.net mvc 中,action方法里根据参数获取数据,假如获取的数据为空,为了响应404错误页,我们可以return HttpNotFound(); 但是在asp.net webform中,实现方式就不一样了。 为了体现本人在实现过程中的所遇到的问题,现举例来说明。 1. 在asp.ne ......
在asp.net mvc 中,action方法里根据参数获取数据,假如获取的数据为空,为了响应404错误页,我们可以return httpnotfound(); 但是在asp.net webform中,实现方式就不一样了。
为了体现本人在实现过程中的所遇到的问题,现举例来说明。
1. 在asp.net webform 中,新建一个webform1.aspx文件,webform1.aspx代码如下:
<%@ page language="c#" autoeventwireup="true" codebehind="webform1.aspx.cs" inherits="pagenotfounddemo.webform1" %> <!doctype html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title></title> </head> <body> 当你看到这行文字时,表示访问正常! </body> </html>
浏览时会显示如下的效果:
现在需要实现传参id,如果id=3时获取不到数据,响应404
webform1.aspx.cs文件如下:
using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; namespace pagenotfounddemo { public partial class webform1 : system.web.ui.page { protected void page_load(object sender, eventargs e) { string id = request.querystring["id"]; if (id == "3") { response.statuscode = 404; httpcontext.current.applicationinstance.completerequest(); } } } }
访问之后发现,还是显示了文字“当你看到这行文字时,表示访问正常!”,而开发人员工具中监视的响应状态码是404。
这不是我想要的效果,我想要的效果如下(类似访问一个不存在的资源时响应的404错误页):
该问题困扰了我很久,甚至有查找过资料是通过配置web.config自定义成错误页去实现,但是与我想要的效果不一致,我想要的效果是响应默认的iis (或iisexpress)中的404错误页。
某天也是在找该问题的解决方案,不经意间找到了解决方法:
response.statuscode = 404; response.suppresscontent = true; httpcontext.current.applicationinstance.completerequest();
response.suppresscontent的解释如下:
修改后webform1.aspx.cs的代码如下:
using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; namespace pagenotfounddemo { public partial class webform1 : system.web.ui.page { protected void page_load(object sender, eventargs e) { string id = request.querystring["id"]; if (id == "3") { response.statuscode = 404; response.suppresscontent = true; httpcontext.current.applicationinstance.completerequest(); } } } }
编译,再次访问,效果如下: