C# 为API添加标准Json响应

C# 为API添加标准Json响应,c#,api,rest,asp.net-core,error-handling,C#,Api,Rest,Asp.net Core,Error Handling,如何遵循标准JSON API响应格式?我的回复当前显示的是被删除的卡的所有数据。如果付款已成功删除,我希望输出成功;如果删除付款时出错,则输出错误 我是否需要创建一个单独的成功和错误模型 我的控制器 [HttpDelete] [产品响应类型(typeof(FluentValidation.Results.ValidationResult),400)] 公共异步任务DeletePaymentMethod(字符串paymentID) { var userId=User.Claims.FirstOrD

如何遵循标准JSON API响应格式?我的回复当前显示的是被删除的卡的所有数据。如果付款已成功删除,我希望输出成功;如果删除付款时出错,则输出错误

我是否需要创建一个单独的成功和错误模型

我的控制器

[HttpDelete]
[产品响应类型(typeof(FluentValidation.Results.ValidationResult),400)]
公共异步任务DeletePaymentMethod(字符串paymentID)
{
var userId=User.Claims.FirstOrDefault(x=>x.Type==“userId”).Value;
var result=new VersionResponse()
{
Data=wait\u paymentService.DeletePaymentMethod(paymentID,userId)
};
返回Ok(结果);
}
我的版本响应

public class VersionResponse
{
    public dynamic Data { get; set; }
}
如果成功,预期响应:

{
  data : {
    success : true
  }
}
出现错误时的预期响应:

{
  error : {
    message : "Payment method does not exist", // string, user friendly message
    }
} 
目前的答复:

如果只有一种付款方式,并且该付款方式已被删除,则响应如下:

{
    "data": {
        "data": []
    }
}
 "data": {
        "data": [
            {
                "id": "pm_1HEllWCCQ3Wtmj18t8Dm08WD",
                "object": "payment_method",
                "billingDetails": {
                    "address": {
                        "city": null,
                        "country": null,
                        "line1": null,
                        "line2": null,
                        "postalCode": null,
                        "state": null,
                        "stripeResponse": null
                    },
                    "email": null,
                    "name": null,
                    "phone": null,
                    "stripeResponse": null
                },
                "card": {
                    "brand": "mastercard",
                    "checks": {
                        "addressLine1Check": null,
                        "addressPostalCodeCheck": null,
                        "cvcCheck": "pass",
                        "stripeResponse": null
                    },
                    "country": "US",
                    "expMonth": 8,
                    "expYear": 2022,
                    "fingerprint": "J2v2Z5D0AXU9RZRW",
                    "funding": "credit",
                    "last4": "4444",
                    "threeDSecureUsage": {
                        "supported": true,
                        "stripeResponse": null
                    },
                    "wallet": null,
                    "stripeResponse": null
                },
                "cardPresent": null,
                "created": "2020-08-11T00:54:59Z",
                "customerId": "cus_HT43dM2M6dWiDT",
                "customer": null,
                "fpx": null,
                "ideal": null,
                "livemode": false,
                "metadata": {},
                "sepaDebit": null,
                "type": "card",
                "stripeResponse": null
            }
        ]
    }
}
否则,如果我们还有多种付款方式,则响应如下:

{
    "data": {
        "data": []
    }
}
 "data": {
        "data": [
            {
                "id": "pm_1HEllWCCQ3Wtmj18t8Dm08WD",
                "object": "payment_method",
                "billingDetails": {
                    "address": {
                        "city": null,
                        "country": null,
                        "line1": null,
                        "line2": null,
                        "postalCode": null,
                        "state": null,
                        "stripeResponse": null
                    },
                    "email": null,
                    "name": null,
                    "phone": null,
                    "stripeResponse": null
                },
                "card": {
                    "brand": "mastercard",
                    "checks": {
                        "addressLine1Check": null,
                        "addressPostalCodeCheck": null,
                        "cvcCheck": "pass",
                        "stripeResponse": null
                    },
                    "country": "US",
                    "expMonth": 8,
                    "expYear": 2022,
                    "fingerprint": "J2v2Z5D0AXU9RZRW",
                    "funding": "credit",
                    "last4": "4444",
                    "threeDSecureUsage": {
                        "supported": true,
                        "stripeResponse": null
                    },
                    "wallet": null,
                    "stripeResponse": null
                },
                "cardPresent": null,
                "created": "2020-08-11T00:54:59Z",
                "customerId": "cus_HT43dM2M6dWiDT",
                "customer": null,
                "fpx": null,
                "ideal": null,
                "livemode": false,
                "metadata": {},
                "sepaDebit": null,
                "type": "card",
                "stripeResponse": null
            }
        ]
    }
}

\u paymentService.DeletePaymentMethod
返回什么?我更喜欢为每个方法创建单独的类。但可以使用master
接口
抽象类
进行工作。但是,在这种情况下,需要“$type”字段为Json.NET正确反序列化。它会消耗额外的带宽。@ChetanRanpariya更新了我的问题,以包括返回的内容,因为您正在将
\u paymentService.DeletePaymentMethod的输出分配给您将获得此响应的数据属性。调用
DeletePaymentMethod
方法后,应该创建
VersionResponse
的对象,并为数据属性赋值。或者您可以简单地执行
返回Ok(new{data=new{success=true})抛出自定义异常和处理程序异常全局。在excepionhander中,您可以按异常类型返回数据。从
\u paymentService.DeletePaymentMethod返回的是什么?我更喜欢为每个异常创建单独的类。但可以使用master
接口
抽象类
进行工作。但是,在这种情况下,需要“$type”字段为Json.NET正确反序列化。它会消耗额外的带宽。@ChetanRanpariya更新了我的问题,以包括返回的内容,因为您正在将
\u paymentService.DeletePaymentMethod的输出分配给您将获得此响应的数据属性。调用
DeletePaymentMethod
方法后,应该创建
VersionResponse
的对象,并为数据属性赋值。或者您可以简单地执行
返回Ok(new{data=new{success=true})抛出自定义异常和处理程序异常全局。在excepionhander中,可以按异常类型返回数据。