设置Response.Status生成"HTTP状态字符串无效"异常

Jon*_*ood 36 asp.net http-response-codes

我正在ASP.NET 4.0和IIS7中编写HTTP处理程序,我需要生成一个文件未找到的条件.

我从Mathew McDonald在C#2010中的新书Pro ASP.Net 4中复制了以下代码.(响应变量是当前HttpResponse的一个实例.)

response.Status = "File not found";
response.StatusCode = 404;
Run Code Online (Sandbox Code Playgroud)

但是,我发现第一行生成了运行时错误 HTTP status string is not valid.

如果,而不是上面的行,我使用以下内容:

response.Status = "404 Not found";
Run Code Online (Sandbox Code Playgroud)

然后一切似乎都很好.实际上,我甚至看到response.StatusCode自动设置为404.

我的问题是我不希望它在生产服务器上失败.如果我能理解实现这一目标的"正确"方法,我会感觉好多了.为什么第一种方法适用于Mathew McDonald而不适合我?第二种方法总是可靠吗?

有人可以提供任何提示吗?

Fré*_*idi 62

那是因为Status属性是发送给客户端的完整状态行,而不仅仅是消息.

你可以写:

response.Status = "404 File not found";
Run Code Online (Sandbox Code Playgroud)

或者,最好:

response.StatusCode = 404;
response.StatusDescription = "File not found";
Run Code Online (Sandbox Code Playgroud)

请注意,根据其文档,HttpResponse.Status不推荐使用HttpResponse.StatusDescription.

  • 此外,如果有人感兴趣,将StatusCode设置为404会自动将StatusDescription设置为"Not found".但是,很难知道确切的规则是什么(将来会是什么),因为这是非常糟糕的文档.设置StatusCode和StatusDescription可能是最好的方法. (10认同)
  • 不希望过于迂腐,我会将描述设置为"Not Found"而不是"File Not Found",因为错误的意图是没有带有该URL的资源而不是文件未打开的事实磁盘. (2认同)