C# 为API添加标准Json响应
如何遵循标准JSON API响应格式?我的回复当前显示的是被删除的卡的所有数据。如果付款已成功删除,我希望输出成功;如果删除付款时出错,则输出错误 我是否需要创建一个单独的成功和错误模型 我的控制器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
[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中,可以按异常类型返回数据。