在MVC5中,我使用以下代码返回带有自定义消息的状态代码。它在我的输出中显示提供的消息。
return new HttpStatusCodeResult(403, "Not allowed");
在.net核心框架中,上述方法不适用,所以我尝试了以下方法,但我没有找到如何传递自定义消息。
StatusCode(403)
它将默认消息显示为"禁止"
如何在StatusCode中提供自定义消息?还有其他方法吗?
答案 0 :(得分:10)
我研究了标准方法的实现(由于Resharper的反编译器):
return Ok("Message");
它基本上会创建新的OkObjectResult,并向其构造函数提供值(“消息”),然后返回该对象。 OkObjectResult只是ObjectResult的派生对象,它具有自己的字段,其默认状态码为(200),将其构造函数参数(消息或您提供的任何对象)中的内容重新转换为基本构造函数(ObjectResult),然后分配从它的私有常量字段到基类的属性StatusCode的值,因此它基本上是ObjectResult的包装。
那么,从这一切可以得出什么结论:我们可以使用基本ObjectResult类以类似的方式返回带有消息的状态代码:
return new ObjectResult("Your message") {StatusCode = 403};
答案 1 :(得分:4)
您可以这样做:
return StatusCode(403, Json("Not allowed."));
答案 2 :(得分:1)
我认为@mmushtaq是对的 - 我想知道你的方法的返回类型是不是IActionResult?请参阅下面的代码示例(pulled from here)。它将返回包含消息
的ObjectResult(不是StatusCodeResult)// GET: api/authors/search?namelike=th
[HttpGet("Search")]
public IActionResult Search(string namelike)
{
var result = _authorRepository.GetByNameSubstring(namelike);
if (!result.Any())
{
return NotFound(namelike);
}
return Ok(result);
}
更多链接和文档:
View a Microsoft API Tutorial here
ObjectResult(多个属性,包括StatusCode和Value。)
StatusCodeResult(只有一个 Int32属性 - StatusCode)
答案 3 :(得分:1)
我发现ContentResult
给出了最简单和可用的结果:
private static ActionResult Result(HttpStatusCode statusCode, string reason) => new ContentResult
{
StatusCode = (int)statusCode,
Content = $"Status Code: {(int)statusCode}; {statusCode}; {reason}",
ContentType = "text/plain",
};
只需返回该调用即可使用它:
return Result(HttpStatusCode.Unauthorized, "Invalid token");
这将导致文本为Status Code: 401; Unauthorized; Invalid token
的401。
答案 4 :(得分:0)
如果您不在Controller中,则可以执行以下操作
return new ObjectResult(Message) { StatusCode = (int)StatusCode };