Web API 中 OData POST 的媒体资源支持

Posted

技术标签:

【中文标题】Web API 中 OData POST 的媒体资源支持【英文标题】:Media Resource Support for OData POST in Web API 【发布时间】:2014-06-19 21:26:06 【问题描述】:

我想创建 oData 控制器来上传文件

文件目录

    文件ID NameWithExtension(类型:字符串) 元数据(类型:列表) 内容(类型:流)

=========================Http 请求操作==================

• GET:~/Files(id)

Content-Type: application/json
Result: FileDto without Content

• GET:~/Files(id)

Content-Type: application/octet-stream
Result: Stream of the File only

• POST:~/文件

Content-Type: ?
Body: FileDto with Content
Result: FileId

不确定与 OData 结合如何实现这一点。

提前致谢

【问题讨论】:

【参考方案1】:

This page 解释了如何创建 oDataController。

1) 要在您的项目中安装该软件包,请打开控制台管理器并输入以下内容:

Install-Package Microsoft.AspNet.Odata

2) 打开您的 WebApiConfig.cs 并在 Register 方法中添加以下代码:

 ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<FileDto>("File");            
            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: null,
                model: builder.GetEdmModel());

3) 创建您的 oDataController 替换 yourDataSourceHere 以使用您自己的类:

public class FileController : ODataController

    [EnableQuery]
    public IQueryable<FileDto> Get()
    
        return yourDataSourceHere.Get();
    

    [EnableQuery]
    public SingleResult<FileDto> Get([FromODataUri] int key)
    
        IQueryable<FileDto> result = yourDataSourceHere.Get().Where(p => p.Id == key);
        return SingleResult.Create(result);
    

    public IHttpActionResult Post(FileDto File)
    
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        yourDataSourceHere.Add(product);

        return Created(File);
    

OBS:为了测试这个解决方案,我更改了FileDto 的属性Content。更具体地说,它是类型!从Streambyte[]。将内容发布为 Base64 字符串。

【讨论】:

以上是关于Web API 中 OData POST 的媒体资源支持的主要内容,如果未能解决你的问题,请参考以下文章

参数中带有 IEnumerable 的 C# OData Web API POST 端点返回错误 400,输入无效

Web API Post 返回 415 - 不支持的媒体类型

[转]Web Api系列教程第2季(OData篇)——使用Web Api创建只读的OData服务

ODATA WEB API扩展使用

如何在自托管 Web API 应用程序中配置 OData 端点

ODATA WEB API----ODATA服务与客户端