C# 我可以在ASP net内核中返回504 HTTP代码吗

C# 我可以在ASP net内核中返回504 HTTP代码吗,c#,asp.net-core-2.1,C#,Asp.net Core 2.1,目前,我有一个ExceptionFilterAttribute来处理控制器上的异常。我的API通过专有TCP/IP连接到服务。如果这个服务不可访问,我想返回一个HTTP 504响应代码和一个正确的错误消息 我已经想出了如何发送400 public override void OnException(ExceptionContext context) { if (!MyService.IsConnected) { context.Result = new BadRe

目前,我有一个ExceptionFilterAttribute来处理控制器上的异常。我的API通过专有TCP/IP连接到服务。如果这个服务不可访问,我想返回一个HTTP 504响应代码和一个正确的错误消息

我已经想出了如何发送400

public override void OnException(ExceptionContext context)
{
    if (!MyService.IsConnected)
    {
        context.Result = new BadRequestObjectResult(new ResultInformation() { ResultCode = 2000056, Message = "My service is not reachable" });

    }
    else
    {
        context.Result = new BadRequestObjectResult(new ResultInformation() { ResultCode = 0, Message = context.Exception.Message });
    }
}
如何更改此代码以发送504和错误消息?

尝试以下操作:

context.HttpContext.Response.StatusCode = 504;
试试这个:

context.HttpContext.Response.StatusCode = 504;
手动使用并设置状态代码

//... omitted for brevity

if (!MyService.IsConnected) {
    var info = new ResultInformation() { 
        ResultCode = 2000056, 
        Message = "My service is not reachable" 
    };
    context.Result = new ObjectResult(info) {
        StatusCode = 504
    };
}

//... omitted for brevity
事实上,大多数需要对象主体的标准状态结果类型都是从ObjectResult派生的,它们在ObjectResult中设置了特定的状态代码。比如说

如果不需要实际返回响应主体,可以使用

手动使用并设置状态代码

//... omitted for brevity

if (!MyService.IsConnected) {
    var info = new ResultInformation() { 
        ResultCode = 2000056, 
        Message = "My service is not reachable" 
    };
    context.Result = new ObjectResult(info) {
        StatusCode = 504
    };
}

//... omitted for brevity
事实上,大多数需要对象主体的标准状态结果类型都是从ObjectResult派生的,它们在ObjectResult中设置了特定的状态代码。比如说

如果不需要实际返回响应主体,可以使用


这是你的答案。当您需要一个响应主体而没有其他更具体的结果类型时,请使用ObjectResult并手动设置状态代码。但是,如果您不需要实际返回响应正文,则可以使用StatusCodeResult。@ChrisPratt我将添加第二部分作为附加信息,这将有助于像符咒一样工作的操作。顺便说一句,我使用了状态码枚举而不是504。这是您的答案。当您需要一个响应主体而没有其他更具体的结果类型时,请使用ObjectResult并手动设置状态代码。但是,如果您不需要实际返回响应正文,则可以使用StatusCodeResult。@ChrisPratt我将添加第二部分作为附加信息,这将有助于像符咒一样工作的操作。顺便说一句,我使用的是StatusCodes枚举,而不是504。这在特定场景中对OP没有帮助。他们需要返回某种IActionResult,但不知道哪一种是最好的。直接设置响应状态代码可能会被它们返回的最终结果类型所覆盖。这在特定场景中对OP没有帮助。他们需要返回某种IActionResult,但不知道哪一种是最好的。直接设置响应状态代码可能会被它们返回的最终结果类型覆盖。