【发布时间】:2012-04-24 17:20:18
【问题描述】:
根据条件,我想从我的 Asp.net 页面发回 400(实际上是 200(状态正常)以外的任何代码)错误代码。
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 以编程方式进行检查。对于请求对象,我在根据请求标头做出决定时忘记发送请求标头信息。
总而言之,代码行很棒。
【问题讨论】:
标签: asp.net http httpmodule http-response-codes