Tag: http status codes

将状态码500发送到客户端时不会呈现页面

我有一个页面(通用处理程序),我想在其上返回状态代码500到客户端,以指示出现问题。 我是这样做的: Response.StatusCode = 500; Response.StatusDescription = “Internal Server Error”; 同时我渲染一条友好的消息,告诉用户出现了问题。 但是,我没有看到我的消息,而是获得了这样的默认IIS消息: 服务器错误500 – 内部服务器错误。 您正在查找的资源存在问题,无法显示。 如果我进入IIS并删除500的错误页面,我收到此消息: 由于发生内部服务器错误,无法显示页面。 它在IIS6中按预期工作,但在IIS7中没有。 我该怎么做才能让它在IIS7中运行?

C#HttpWebRequest.GetResponse – 如何处理非exception与webexception响应的StatusCode用法?

有人可以帮助清除HttpWebResponse和WebException中“StatusCode”属性的用法吗? 例如,似乎如果: a)没有exception,那么HttpWebResponse将有一个StatusCode可以有一些值,表明两者: – 成功(例如OK,Accepted等) – 失败(例如UseProxy,RequestTimeout等) b)有一个WebExeption throw,它本身有一个响应对象,它还有一个StatusCode(我假设它是基于相同的HttpStatusCode枚举)。 问题1 – 在StatusCode将触发WebException的情况下是否存在任何一致性(并且您将在exception中获取详细信息),相比之下没有exception会返回但是您会在StatusCode中找到结果响应对象? 问题2 – 或者更具体地说,尝试处理httpWebRequest.GetResponse调用的pseduo代码(或C#代码本身)是什么,以便您想要区分用户的响应类别: 代理设置/代理问题=>所以可以告诉用户修复代理设置 连接问题/ web-server down =>所以用户意识到这一点 服务器端错误(例如服务器在那里但是处理请求时存在问题 – 例如内容不存在)=>因此用户可以通过网站管理员加薪 成功案例(我认为这不仅仅是OK)=> na(成功案例) 谢谢

设置Context.Response.StatusCode似乎不起作用

我有一个HttpHandler,代码如下: using System; using System.Web; using Company.Cms; using Company.Web.Handlers.Console; namespace Company.Web.Handlers { /// /// Summary description for AdminHandler /// public class AdminHandler : IHttpHandler { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { HttpRequest request = context.Request; HttpResponse response = context.Response; string action = request.QueryString[“action”]; if (!HttpContext.Current.User.CanAdminister()) { […]

捕获特定的WebException(550)

假设我创建并执行System.Net.FtpWebRequest 。 我可以使用catch (WebException ex) {}来捕获此请求引发的任何与Web相关的exception。 但是如果我有一些逻辑,我只想在由于(550) file not found引发exception时执行? 最好的方法是什么? 我可以复制exception消息并测试相等性: const string fileNotFoundExceptionMessage = “The remote server returned an error: (550) File unavailable (eg, file not found, no access).”; if (ex.Message == fileNotFoundExceptionMessage) { 但从理论上讲,这条消息似乎可以改变。 或者,我可以测试以查看exception消息是否包含“550”。 如果消息被更改,这种方法可能更有效(它可能在文本中的某处仍然包含“550”)。 但是,如果某些其他WebException的文本碰巧包含“550”,那么这样的测试当然也会返回true。 似乎没有一种方法可以只访问exception的数量 。 这可能吗?

如何从exception中获取IIS子状态代码?

我正在使用HttpModule以这样的方式处理exception: int errorCode = 500; HttpApplication httpApp = (HttpApplication)sender; try { if (httpApp.Server != null) { Exception ex; for (ex = httpApp.Server.GetLastError(); ex != null; ex = ex.InnerException) { try { HttpException httpEx = ex as HttpException; if (httpEx != null) errorCode = httpEx.GetHttpCode(); // … retrieve appropriate content based on errorCode } catch { […]

HttpStatusCodeResult(401)返回“302 Found”

使用ASP.NET MVC 5,我想为不同的场景返回适当的HTTP状态代码(401用户未经过身份validation,403当用户无权使用某些资源时等),而不是在jQuery中处理它们。 但问题是,当我尝试返回401时,它总是返回“302:Found”。 自定义状态代码的技巧是什么,以及为什么这不起作用? public ActionResult My() { if (User.Identity.IsAuthenticated == false) { return new HttpStatusCodeResult(401, “User is not authenticated.”); // Returns “302: Found” } // … other code … } 编辑1:有趣的位: 如果我用这样的404替换401: return new HttpNotFoundResult(“User is not authenticated.”); 然后它确实给出了一个404和jQuery可以捕获的问题。 然而,由于错误代码不同,它不是一个优雅的解决方案。 编辑2: 302对我不好,因为结果将在jQuery.get().fail() ,但302不会triger fail()