我希望下面的示例控制器返回没有内容的状态代码418。设置状态代码很容易,但似乎需要做一些事情来发出请求结束的信号。在ASP.NET Core之前的MVC或WebForms中,可能是对Response.End()
的调用,但它如何在不存在Response.End
的ASP.NET Core中工作?
public class ExampleController : Controller
{
[HttpGet][Route("/example/main")]
public IActionResult Main()
{
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
// How to end the request?
// I don't actually want to return a view but perhaps the next
// line is required anyway?
return View();
}
}
答案 0 :(得分:188)
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
如何结束请求?
尝试其他解决方案,只需:
return StatusCode(418);
您可以使用StatusCode(???)
返回任何HTTP状态代码。
此外,您可以使用专用结果:
成功:
return Ok()
←Http状态代码200 return Created()
←Http状态代码201 return NoContent();
←Http状态代码204 客户端错误:
return BadRequest();
←Http状态代码400 return Unauthorized();
←Http状态代码401 return NotFound();
←Http状态代码404
更多详情:
答案 1 :(得分:3)
最好的方法是:
return this.StatusCode(StatusCodes.Status418ImATeapot, "Error message");
'StatusCodes'具有各种返回状态,您可以在此链接https://httpstatuses.com/
中查看所有返回状态。选择状态代码后,返回一条消息。
答案 2 :(得分:0)
此代码可能适用于非.NET Core MVC控制器:
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
return Json(new { status = "mer" }, JsonRequestBehavior.AllowGet);
答案 3 :(得分:0)
如果有人想使用NestedScrollView(
headerSliverBuilder: (BuildContext ctx, isScrolled) {
return <Widget>[
SliverAppBar(
title: Text('Applying to this job opportunity'),
pinned: true,
titleSpacing: 0,
floating: true,
expandedHeight: 180,
flexibleSpace: //some widgets
)
]
}
)
进行此操作,则可能在Web API项目中,下面可能会有所帮助。
IHttpActionResult
答案 4 :(得分:0)
查看如何创建当前的对象结果。这是BadRequestObjectResult。只是ObjectResult的扩展,带有值和StatusCode。
我以与408相同的方式创建了一个TimeoutExceptionObjectResult。
/// <summary>
/// An <see cref="ObjectResult"/> that when executed will produce a Request Timeout (408) response.
/// </summary>
[DefaultStatusCode(DefaultStatusCode)]
public class TimeoutExceptionObjectResult : ObjectResult
{
private const int DefaultStatusCode = StatusCodes.Status408RequestTimeout;
/// <summary>
/// Creates a new <see cref="TimeoutExceptionObjectResult"/> instance.
/// </summary>
/// <param name="error">Contains the errors to be returned to the client.</param>
public TimeoutExceptionObjectResult(object error)
: base(error)
{
StatusCode = DefaultStatusCode;
}
}
客户:
if (ex is TimeoutException)
{
return new TimeoutExceptionObjectResult("The request timed out.");
}