如何返回客户端错误消息并带有状态码

5
我尝试使用这个:

return Request.CreateResponse(HttpStatusCode.InternalServerError, "My message");

我尝试了这个:
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "My message");

但是当我浏览器中看到500错误时,任何类似于“My message”的信息都会显示出来。

您实际上正在返回500错误:HttpStatusCode.InternalServerError是500错误。 - Floremin
是的,我知道,我们也可以返回BadRequest状态码和其他状态码,但我仍然不知道如何发送带有状态码的自定义消息,尽管该方法允许我放置我的方法。 - Sergey
你是从哪里返回的?在控制器中的Action方法吗? - Floremin
从MVC控制器中的Action - Sergey
3个回答

10

要从ASP.NET MVC控制器返回特定的响应代码和消息,请使用:

return new HttpStatusCodeResult(errorCode, "Message");

确保控制器中的方法类型为ActionResult,而不是ViewResult。


这只是一个异常,我想返回带有状态码的错误,这是另一回事。 - Sergey
对不起,我以为这会满足你的需求。我已经编辑了答案。 - Floremin
4
请记住,如果您国际化代码,这种策略将不起作用。例如,“return new HttpStatusCodeResult(errorCode, "未能删除用户。");” 不会返回您期望的内容,您只会看到“???????????”。消息文本在HTTP标头中返回,并且仅支持ASCII字符(无论如何并非所有Unicode字符)。 - Stuart Hallows

1
我可以使用以下代码在错误响应体中放置自定义消息: ```` 我能够通过以下代码在错误响应主体中添加自定义消息: ````
Response.TrySkipIisCustomErrors = true;
Response.Clear();
Response.Write( $"Custom Error Message." );
return new HttpStatusCodeResult( HttpStatusCode.InternalServerError );

0
我有一个ErrorController,可以帮助我抛出错误并显示漂亮的错误页面,使用Response.StatusCode返回不同的状态码。
namespace Site.Controllers {

    [OutputCache(Location = OutputCacheLocation.None)]
    public class ErrorController : ApplicationController {

        public ActionResult Index() {
            ViewBag.Title = "Error";
            ViewBag.Description = "blah blah";
            return View("Error");
        }

        public ActionResult HttpError404(string ErrorDescription) {
            Response.StatusCode = 404;
            ViewBag.Title = "Page not found (404)";
            ViewBag.Description = "blah blah";
            return View("Error");
        }


        ...

    }
}

编辑 为了将仅消息返回给ajax结果,我在操作过滤器中使用类似于以下内容的代码

        Response.StatusCode = 200;

        //Needed for IIS7.0
        Response.TrySkipIisCustomErrors = true;

        return new ContentResult {
            Content = "ERROR: " + Your_message,
            ContentEncoding = System.Text.Encoding.UTF8
        };

也许我只是采取了错误的方法,但我想使用JavaScript在客户端接收此消息。 - Sergey
ViewBag 无法帮助我解决这个问题。 - Sergey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接