Asp.net-Web-Api

Web API 中 OData POST 的媒體資源支持

  • September 23, 2015

我想創建 oData 控制器來上傳文件

文件Dto

  1. 文件編號
  2. NameWithExtension(類型:字元串)
  3. 元數據(類型:列表)
  4. 內容(類型:流)

==========================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 結合時如何實現這一點。

提前致謝

本頁說明如何創建 oDataController。

**1)**要在您的項目上安裝包,打開控制台管理器並輸入:

Install-Package Microsoft.AspNet.Odata

**2)**打開你的WebApiConfig.csand,在內部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 字元串。

引用自:https://stackoverflow.com/questions/23440933