Http响应代码以编程方式

时间:2012-04-24 17:20:19

标签: asp.net http httpmodule http-response-codes

根据条件,我想从我的Asp.net页面发回400(实际上是200(状态OK)以外的任何代码)错误代码。

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,但同样如此。

我不明白为什么在设置响应代码之前执行任何其他代码行然后没有设置响应时,任何人都面临这种情况。

但我确实清除了回复内容。

没关系

没关系。

这个问题有两个原因:

一个是localhost没有为HTTPREquest状态代码抛出所需的错误,当部署到服务器上的IIS站点时,一切看起来都不错。

其次是我使用HttpWebRequest自动化测试以编程方式检查。对于请求对象,我忘记发送请求标头信息,因为我根据请求标头做出决定。

总而言之,代码行很棒。

1 个答案:

答案 0 :(得分:0)

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