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

时间:2014-05-03 06:06:34

标签: asp.net-web-api odata

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

FileDto

  1. FILEID
  2. NameWithExtension(Type:String)
  3. 元数据(类型:列表)
  4. 内容(类型:流)
  5. ========================= Http请求操作================== < / p>

    •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:〜/ Files

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

    在与OData结合使用时,我不确定如何实现这一目标。

    提前致谢

1 个答案:

答案 0 :(得分:3)

This page解释了如何创建oDataController。

1)要在项目中安装软件包,请打开控制台管理器并输入:

Install-Package Microsoft.AspNet.Odata

2)打开您的WebApiConfig.csRegister方法,添加以下代码:

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

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

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字符串。