2012-04-24 84 views
0

根据条件,我想从我的Asp.net页面发回一个400(实际上是除了200(Status OK)以外的任何代码)错误代码。编程的Http响应代码

if(Failed) 
{ 
Context.Response.TrySkipIisCustomErrors = true; 

Context.Response.ClearContent(); 

Context.Response.StatusCode = (int)HttpStatusCode.BadRequest; 

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Context.Response.End(); 
} 

我在PageLoad方法中有此代码。但不幸的是,如果我有上面的if语句(是If语句中的代码被执行,在调试看到这一点)

但这不工作时,我

Context.Response.TrySkipIisCustomErrors = true; 

Context.Response.ClearContent(); 

Context.Response.StatusCode = (int)HttpStatusCode.BadRequest; 

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Context.Response.End(); 

直接在整个代码放置没有任何其他代码的PageLoad在这些行之前,我找回响应代码,这很奇怪。

我也尝试使用HTTPModule,但也一样。

我不明白为什么在设置响应代码之前执行任何其他代码行之前没有设置响应,有任何人遇到这种情况。

但我确实收到了回复内容。

没关系

没关系。

有两个原因,这个问题:

一个是本地主机didnt抛出所需的错误的HttpRequest状态代码,并在部署到IIS网站服务器上,一切都看起来很不错。

其次是我正在自动化测试,以编程方式使用HttpWebRequest进行检查。对于请求对象,我已经忘记发送请求头信息,因为我正在根据请求头进行判断。

总而言之,代码行很棒。

回答

0

我建议你检查变量“Failed”是否设置正确。为了调试的目的,只是尝试将if条件改为if(true)
我猜测可能存在您在条件语句中使用的变量的问题