gpt4 book ai didi

c# - ASP .NET WebAPI 路由数据模式

转载 作者:可可西里 更新时间:2023-11-01 08:25:04 26 4
gpt4 key购买 nike

目前,我们正在使用这样的路线:

[HttpPost]
[Route("upload")]
public async Task<dynamic> Upload(dynamic uploadedData)
{
JArray files = uploadedData.pdfs;
// ...
}

我不想使用dynamic,而是希望对传入的数据有一个示意性的理解。所以我可以使用这样的设置,使用一个定义模式的类:

public class UploadRequest : JObject
{
public JArray pdfs { get; set; }
}

[HttpPost]
[Route("upload")]
public async Task<dynamic> Upload(UploadRequest uploadedData)
{
// Now can access the JArray via uploadedData.pdfs directly
// ...
}

这是处理这种情况的正确方法吗?或者是否有另一种通过 ASP .NET WebAPI 接收 JSON 数据的标准最佳实践?

具体来说,这种方法目前行不通。虽然我的小模式类扩展了 JObject,但我得到了一个错误

The parameters dictionary contains an invalid entry for parameter 'uploadedData' for method 'System.Threading.Tasks.Task`1[System.Object] Upload(UploadRequest)' in 'EditPdfServer.Controllers.PdfFileController'. The dictionary contains a value of type 'Newtonsoft.Json.Linq.JObject', but the parameter requires a value of type 'EditPdfServer.Controllers.PdfFileController+UploadRequest'.

那么首先,这看起来是一种正确的方法吗?其次,还有更好的吗?第三,为什么这种方法不起作用?提前致谢。

最佳答案

你在正轨上。

您无需过分关注 Newtonsoft.Json 的内部实现。特别是,您应该尽量避免使用 JObject/JToken/其他 J 类型,并且您绝对不需要子类化 JObject。

您的请求对象类可以是:

public class UploadRequest
{
[JSONProperty("pdfs")]
public SomePDFClass PDFs[] { get; set; }
}

这将映射到以下请求:

{
"pdfs": [
{ <some PDF object here> },
{ <some PDF object here> },
{ <some PDF object here> }
]
}

JSONPropertyAttribute 的字符串参数定义属性在 JSON 文档中出现的名称,因此您不需要在代码中使用与在 JSON 中相同的名称。您可以在代码中更改名称,只要属性仍然使用与文档相同的名称即可。

关于c# - ASP .NET WebAPI 路由数据模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com