我一直在努力整天在我的ASP.NET MVC 2应用程序中实现error handling。 我已经看过各种技术,但都没有正常工作。 我正在使用MVC2和.NET 4.0(在MVC3发布之前启动了项目;我们将在我们发布初始版本后进行升级)。 在这一点上,我会很乐意妥善处理404和500错误 – 403(需要授权)也会很好,其次是各种其他具体的回应。 现在,我可以在404之前全部拿到404,全部500,全部302,在500之前全部拿到302。 这是我的要求(它应该非常接近HTTP的基本要求): 如果找不到资源,则抛出一个404,并显示一个404请求的URL的特定页面。 不要像302那样返回一个中间响应代码。理想情况下,保持请求的URL,而不是像/Error/NotFound那样显示一个新的URL,但是如果后者显示,确保我们没有返回redirect响应来获取它。 如果发生内部服务器错误,请抛出500,并显示一个500特定的错误,并指出错误的位置。 同样,不要返回中间响应代码,理想情况下不要更改URL。 以下是我想要的404: 找不到静态文件: /Content/non-existent-dir/non-existent-file.txt 未find控制器: /non-existent-controller/Foo/666 find控制器,但未find操作: /Home/non-existent-action/666 find控制器和操作,但操作无法find请求的对象: /Home/Login/non-existent-id 以下是我认为的500: 发布一个错误的值: POST /User/New/new-user-name-too-long-for-db-column-constraint 与数据无关的问题,如Web Service端点未响应 其中一些问题需要通过特定的控制器或模型来识别,然后控制器应该抛出相应的HttpException。 其余的应该更通用地处理。 对于404情况#2,我试图使用自定义的ControllerFactory来抛出404如果控制器无法find。 对于404情况#3,我试图使用一个自定义的基本控制器来覆盖HandleUnknownAction并抛出404。 在这两种情况下,我在404之前得到了一个302.而且,我从来没有得到500个错误; 如果我修改Web.config来在我的Web服务端点input一个拼写错误,我仍然得到一个302,然后一个404说不能find使用 Web服务的URL(控制器/操作)。 我也得到请求的URL作为(不需要的)查询string参数: /Error/NotFound?aspxerrorpath=/Home/non-existent-action 这两种技术来自http://www.niksmit.com/wp/?p=17 (如何使用ASP.Net MVC获得正常的404(页面未find)错误页面),从http:// richarddingwall指出。名称/ 2008/08/17 /为基础的战略,为资源-404-错误-在-ASPNET-MVC / 如果在Web.config中有<customErrors mode="On" defaultRedirect="~/Error/Unknown" redirectMode="ResponseRedirect" /> ,我会得到相应的响应代码,但是我的Error控制器永远不会被调用。 取出redirectMode属性让我的MVC错误的意见,但与一个介入302和一个更改的URL – […]
我需要testing我编写的一些客户端应用程序代码,以testing其对来自Web服务器的HTTP响应中返回的各种状态代码的处理。 我有Fiddler 2(Webdebugging代理)安装,我相信有一种方法来修改使用这个应用程序的反应,但我努力找出如何。 这将是最方便的方式,因为这样可以让我无需修改客户端和服务器代码。 任何人都可以协助,因为我想拦截从服务器发送到客户端的HTTP响应,并在到达客户端之前修改状态码? 任何意见将不胜感激。
什么HTTP响应头被要求从服务器发送到客户端? 我正在努力优化HTTP响应头,以最大限度地减lessHTTP响应开销。 我知道“开销”有点夸张,但我喜欢干净的输出。 我看到很多网站,发送冗余caching标题。 例如 指定Expires和Cache-Control: max-age ,或指定Last-Modified和ETag都是多余的。 资源 HTTP / 1.1:标题字段定义
我正在devise一个RESTful API,其中一些调用是通过HTTP公开的,有些需要API密钥并通过HTTPSencryption。 我正在考虑如果HTTP请求发送到其中一个私有资源应该发送什么响应代码。 到目前为止唯一跳出来的是412 –先决条件失败 ,但是标准表明,先决条件是由请求者而不是服务器强加的。 对于这种情况,有没有适当的回答代码,或者我只需要放弃和做400 ?
我的API控制器正在返回一个csv文件,如下所示: [HttpPost] public HttpResponseMessage GenerateCSV(FieldParameters fieldParams) { var output = new byte[] { }; if (fieldParams!= null) { using (var stream = new MemoryStream()) { this.SerializeSetting(fieldParams, stream); stream.Flush(); output = stream.ToArray(); } } var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(output) }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = […]
默认情况下,如果遇到类似于HTTP 404的情况,Tomcat会将一些HTML内容发送回客户端。我知道通过web.xml 可以configuration一个<error-page>来自定义此内容。 不过,我只想让Tomcat 不要发送任何响应内容(当然,我仍然喜欢状态码)。 有什么方法可以轻松configuration这个? 我试图避免A)明确发送空的内容从我的Servlet的响应stream,和B)configuration自定义错误页面的一大堆HTTP错误状态在我的web.xml 。 对于一些背景,我正在开发一个HTTP API,并控制自己的响应内容。 因此,对于HTTP 500,我在包含错误信息的响应中填充了一些XML内容。 对于像HTTP 404这样的情况,HTTP响应状态对于客户端来说已经足够了,tomcat正在发送的内容是不必要的。 如果有不同的方法,我可以接受。 编辑:经过不断的调查,我仍然找不到解决办法。 如果有人可以肯定地说这是不可能的,或提供资源certificate它不起作用,我会接受这个答案,并尝试解决它。
我在我的Java应用程序中使用org.apache.http.HttpResponse类,并且需要能够获取HTTP状态码。 如果我使用.toString() ,我可以在那里看到HTTP状态码。 有没有其他的函数,我可以只是获得HTTP状态代码为int或string? 谢谢一堆!
我们使用Flask作为我们的API之一,我只是想知道如果有人知道如何返回一个HTTP响应201? 对于像404这样的错误,我们可以调用: from flask import abort abort(404) 但是,我得到了201 LookupError:201也不例外 我需要在文档中创build自己的例外吗?
当我的WebApi GET操作中找不到某个东西时,我返回一个NotFound IHttpActionResult 。 随着这个回应,我想发送一个自定义消息和/或exception消息(如果有的话)。 当前ApiController的NotFound()方法不会提供重传消息。 有没有办法做到这一点? 或者我将不得不写我自己的自定义IHttpActionResult ?
对于从Web API 2控制器返回,如果响应正常(状态200),我可以返回内容与响应: public IHttpActionResult Get() { string myResult = … return Ok(myResult); } 如果可能的话,我想在这里使用内置的结果types: https : //msdn.microsoft.com/en-us/library/system.web.http.results(v = vs.118).aspx 我的问题是,对于另一种types的响应(而不是200),我怎样才能返回一个消息(string)呢? 例如,我可以这样做: public IHttpActionResult Get() { return InternalServerError(); } 但不是这样的: public IHttpActionResult Get() { return InternalServerError("Message describing the error here"); } 理想情况下,我希望这是泛化,以便我可以发送一个消息与IHttpActionResult的任何实现。 我是否需要这样做(并build立自己的回应讯息): public IHttpActionResult Get() { HttpResponseMessage responseMessage = … return ResponseMessage(responseMessage); } 或者,还有更好的方法?