54

我们在前端使用 OpenWeb js 库,当某些类型的错误发生时,它们需要 .NET 中间层向它们发送特定的 HTTP 标头状态代码。我试图通过这样做来实现这一目标:

public ActionResult TestError(string id) // id = error code
{
    Request.Headers.Add("Status Code", id);
    Response.AddHeader("Status Code", id);
    var error = new Error();
    error.ErrorID = 123;
    error.Level = 2;
    error.Message = "You broke the Internet!";

    return Json(error, JsonRequestBehavior.AllowGet);
}

它有点成功了。见截图: http 状态码 http://zerogravpro.com/temp/pic.png

请注意,我在响应标头中实现了 400 的状态代码,但我确实需要请求标头中的 400。相反,我得到“200 OK”。我怎样才能做到这一点?

我进行调用的 URL 结构很简单:/Main/TestError/400

4

3 回答 3

103

What is the proper way to send an HTTP 404 response from an ASP.NET MVC action?

您要做的是设置Response.StatusCode而不是添加标题。

public ActionResult TestError(string id) // id = error code
{
    Response.StatusCode = 400; // Replace .AddHeader
    var error = new Error();  // Create class Error() w/ prop
    error.ErrorID = 123;
    error.Level = 2;
    error.Message = "You broke the Internet!";

    return Json(error, JsonRequestBehavior.AllowGet);
}
于 2012-08-24T15:43:46.257 回答
61

如果您只想返回错误代码,则可以执行以下操作:

public ActionResult TestError(string id) // id = error code 
{ 
      return new HttpStatusCodeResult(id, "You broke the Internet!");
}

参考:关于 Mvc.HttpStatusCodeResult 的 MSDN 文章

否则,如果您想返回其他信息,请使用

Response.StatusCode = id

代替

Response.AddHeader("Status Code", id); 
于 2012-08-24T15:39:48.120 回答
1

如果您无法将 json 结果放入您的视图中,请尝试添加以下内容:

Response.TrySkipIisCustomErrors = true;

在这之前 :

Response.StatusCode = 400;

关于这篇文章的更多细节:https ://stackoverflow.com/a/37313866/9223103

于 2018-01-16T08:48:14.457 回答