如何在 asp.net core 2.1 中使用自定义消息设置状态代码?
Posted
技术标签:
【中文标题】如何在 asp.net core 2.1 中使用自定义消息设置状态代码?【英文标题】:How do I set the status code with custom message in asp.net core 2.1? 【发布时间】:2019-09-08 11:21:37 【问题描述】:我正在使用 2.1 版 asp.net 核心,我创建了一个示例 API 项目,该项目运行良好,但我无法使用自定义消息修改状态代码,例如:
在邮递员中:
200 正常
期待:
200 自定义消息
我试过的代码:
[HttpGet]
public IActionResult Get()
Response.StatusCode = 200;
Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "Custom_Message";
return Ok();
邮递员的当前输出:
GitHub Repository
【问题讨论】:
return Content("Custom_Message")
@SlavaUtesinov 它在正文中附加了“Custom_Message”值。我希望该消息显示在 200
旁边
你显示的代码对我有用。
@KirkLarkin 好的,在屏幕截图中:它显示的是 200 OK
和我想要的 200 Custom_Message
。如果这是您所得到的,请随时发布答案
@KirkLarkin 将添加它
【参考方案1】:
我认为您应该创建自定义类:
public class CustomResult : OkResult
private readonly string Reason;
public CustomResult(string reason) : base()
Reason = reason;
public override void ExecuteResult(ActionContext context)
if (context == null)
throw new ArgumentNullException(nameof(context));
context.HttpContext.Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = Reason;
context.HttpContext.Response.StatusCode = StatusCode;
然后在你的控制器方法中:
[HttpGet]
public IActionResult Get()
return new CustomResult("Custom reason phrase");
输出
【讨论】:
我想问题不在于代码,因为正如 cmets 中报告的那样,您的代码也可以很好地工作。您是否调用了正确的方法?这也与.NET Core 2.1
兼容,所以我不知道出了什么问题。
你应该改变继承而不是状态码。因此,例如,如果您想使用400
作为状态码,您应该将: OkResult
更改为: BadRequestResult
@PrashantPimpale 对不起,我看错了,所以它适用于每个状态代码,但不适用于 200?这真的很奇怪
是的,我也无法理解为什么这对 200 不起作用【参考方案2】:
[ApiController]
[Route("api/vversion:apiVersion/[controller]")]
public abstract class BaseApiController : ControllerBase
public override OkResult Ok()
return base.Ok();
public override OkObjectResult Ok([ActionResultObjectValue] object value)
return base.Ok(new Response
Result = value,
Status = ResultStatus.Success,
Message = string.Empty
);
【讨论】:
以上是关于如何在 asp.net core 2.1 中使用自定义消息设置状态代码?的主要内容,如果未能解决你的问题,请参考以下文章