MVC 控制器返回一个错误的请求?

我想知道是否有可能返回一个错误的请求与内容从一个 MVC 控制器?我能做到这一点的唯一途径是 throw HttpException,但在这里我不能设置任何内容。尝试这种方法,但由于一些奇怪的原因,我总是得到一个确定回来。有可能做到吗?

public class SomeController : Controller
{
[HttpPost]
public async Task<HttpResponseMessage> Foo()
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest);
response.Content = new StringContent("Naughty");


return response;
}
}
101024 次浏览

您可以像下面这样向第二个参数传递错误消息:

return new HttpResponseMessage(HttpStatusCode.BadRequest, "Your message here");

将 HTTP状态码设置为无效请求,并使用 Content方法发送内容和响应。

public class SomeController : Controller
{
[HttpPost]
public async Task<ActionResult> Foo()
{
Response.StatusCode = 400;
return Content("Naughty");
}
}

除了@Ekk 的 回答,请务必检查以下内容:

NET + Azure 400错误请求不返回 JSON 数据

将以下条目添加到“ web.config”中。

 <system.webServer>
<httpErrors existingResponse="PassThrough"/>
</system.webServer>

...

return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");

你当然可以。

看看我的动作

// GET: Student/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Student student = db.Students.Find(id);
if (student == null)
{
return HttpNotFound();
}
return View(student);
}

我觉得这是最好的练习

  1. 如果用户没有提供所需的值,则返回 HttpStatusCodeResult(HttpStatusCode.BadRequest);

  2. 返回 HttpNotFound();,以防用户提供了所需的值但没有隐藏

希望这个能帮到你

TrySkipIisCustomError 标志可用于关闭 IIS 自定义错误处理。

[HttpGet]
public void Foo()
{
HttpContext.Response.TrySkipIisCustomErrors = true;
HttpContext.Response.StatusCode = 400;
HttpContext.Response.Write("Naughty");
}

回答.Net 核心: 返回 IActionResult作为文档 给你。例如:

        public IActionResult Get(int id = 0)
{
try
{
var obj = _myRepo.Get(id);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}


return Ok(obj);
}