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

标签 c# asp.net asp.net-web-api routes schema

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

[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/

相关文章:

c# - 如何在 fiddler 中捕获服务器端 web api 调用?

visual-studio - 在 Visual Studio 中更改已发布 API 应用程序的部署槽

asp.net-web-api - 使用 Autofac 和 ASP.Net Identity 将 ApplicationUserManager 传递给 ApplicationOAuthProvider

c# - 以字节流形式下载 PDF,然后在 Xamarin.Forms 的默认 Android 应用程序中打开

c# - C#获取登录用户名

javascript - 母版页 js/代码在子文件夹中不起作用

asp.net - HTML/ASP.NET : &lt;input type =“hidden” name =“reference” value =“ABC”/>

c# - 在 gridview 中进行数据绑定(bind)期间修改数据源行值

c# - WPF 中的颜色过渡

c# - 通知图标附近出现小气球/框