你需要在.NET中设置Response.Status和Response.StatusCode吗?

时间:2013-12-20 01:29:08

标签: .net http

说我想要返回403.以下哪项更好?

Response.StatusCode = 403;
Response.Status = "Forbidden";

Response.StatusCode = 403;

为什么StatusCode有一个单独的状态字符串?设置有什么影响?如果你把它设置为完全错误的东西会发生什么,例如: StatusCode = 403,Status =“OK”?

3 个答案:

答案 0 :(得分:3)

不要使用Status属性,不推荐使用StatusDescription属性。

设置StatusCode属性,如果您需要的描述与该状态代码关联的描述不同,则只设置StatusDescription属性。

答案 1 :(得分:1)

我会回复这样的事情:

Request.CreateResponse(HttpStatusCode.OK)

最好使用HttpStatusCode常量。

无论如何,您始终可以手动设置StatusCode和Status以创建自定义代码和说明。

答案 2 :(得分:1)

正如Guffa在答案中所述,如果您不想使用W3C-defined defaults,请仅设置说明。

在大多数情况下,对大多数用户来说,设置它没有明显的效果。通常只是忽略描述,并且仅针对用户代理所显示的4xx和5xx错误代码,以防没有给出响应的主体。它确实出现在浏览器的日志和开发者控制台中,所以它不像是完全隐藏的。

有时候让错误更加冗长是一个好主意。例如,403的默认文本为Forbidden,但如果是这种情况,可以将其设置为403 Invalid user domain - 它可能会使某些调试变得更容易,或者可以帮助支持部门。特别是对于像500这样的一般性错误,提供更多信息通常会更好,尽管不足以成为安全风险。此外,如果您有关于问题的额外信息,则应在正文中详细解释,而不是HTTP状态说明。

最后,回答最后一个问题 - 如果您发送403 OK响应,任何内容都不会被烧毁,任何内容都不会爆炸,并且没有浏览器会崩溃。您可能只会毫无希望地混淆看到该消息的用户,这只是一件愚蠢的事情,就像在遇到磁盘空间问题时故意抛出SQLException一样。浏览器只查看403并处理它,但用户不会是一个感恩的客户。