如何在c#中显示自定义消息的状态代码?

时间:2017-10-11 13:05:54

标签: c# asp.net-core

在MVC5中,我使用以下代码返回带有自定义消息的状态代码。它在我的输出中显示提供的消息。

return new HttpStatusCodeResult(403, "Not allowed");

在.net核心框架中,上述方法不适用,所以我尝试了以下方法,但我没有找到如何传递自定义消息。

StatusCode(403) 

它将默认消息显示为"禁止"

如何在StatusCode中提供自定义消息?还有其他方法吗?

5 个答案:

答案 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 };