C# 要应用于非OK响应的属性

C# 要应用于非OK响应的属性,c#,asp.net,.net,asp.net-web-api2,visual-studio-2017,C#,Asp.net,.net,Asp.net Web Api2,Visual Studio 2017,如果我有控制器GET方法,例如: [HttpGet] [Route("accountrecv({accountid})/promisepay", Name = "GetPromisePay")] public HttpResponseMessage GetPromisePay(int accountid) { var query = Request.RequestUri.Query; var uri = new Uri(Client

如果我有控制器GET方法,例如:

    [HttpGet]
    [Route("accountrecv({accountid})/promisepay", Name = "GetPromisePay")]
    public HttpResponseMessage GetPromisePay(int accountid)
    {
        var query = Request.RequestUri.Query;
        var uri = new Uri(Client.Instance.BaseAddress.ToString() + accountid + "/promisepay" + query);
        var request = new HttpRequestMessage { RequestUri = uri, Method = HttpMethod.Get };
        var response = Client.Instance.SendAsync(request);
        return response.Result;
    }
[NonOKResponse]
[HttpGet]
[Route.......]
public HttpResponseeMessage GetPromisePay(int accountid)
{
//my code
return response.Result //but force it here to return 404 for EVERY response other than 200
}
HttpStatusCode
不正常的情况下,如何对所有响应施加行为

我想我会在方法级别创建一个属性,例如:

    [HttpGet]
    [Route("accountrecv({accountid})/promisepay", Name = "GetPromisePay")]
    public HttpResponseMessage GetPromisePay(int accountid)
    {
        var query = Request.RequestUri.Query;
        var uri = new Uri(Client.Instance.BaseAddress.ToString() + accountid + "/promisepay" + query);
        var request = new HttpRequestMessage { RequestUri = uri, Method = HttpMethod.Get };
        var response = Client.Instance.SendAsync(request);
        return response.Result;
    }
[NonOKResponse]
[HttpGet]
[Route.......]
public HttpResponseeMessage GetPromisePay(int accountid)
{
//my code
return response.Result //but force it here to return 404 for EVERY response other than 200
}
我如何定义一个可以在所有GET上使用的属性,以根据某些标准强制执行特定响应?

我相信回答了您的问题。您可以使用
ExceptionFilterAttribute
来处理和管理异常。例如:

public class GeneralExceptionFilterAttribute : ExceptionFilterAttribute 
{
    public override void OnException(HttpActionExecutedContext context)
    {
        context.Response = new HttpResponseMessage(HttpStatusCode.NotFound);
    }
}

听起来你需要一个结果过滤器


为什么不在返回结果之前检查
响应的状态代码呢?因为我有数百个控制器,可能还有数千个方法,我需要对它们应用此i行为或ActionFilter在这里实现工作吗?