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
。更具体地说,它是类型!从Stream
到byte[]
。将内容发布为 Base64 字符串。
【讨论】:
以上是关于Web API 中 OData POST 的媒体资源支持的主要内容,如果未能解决你的问题,请参考以下文章
参数中带有 IEnumerable 的 C# OData Web API POST 端点返回错误 400,输入无效
Web API Post 返回 415 - 不支持的媒体类型
[转]Web Api系列教程第2季(OData篇)——使用Web Api创建只读的OData服务