Asp.net-Web-Api
Web API 中 OData POST 的媒體資源支持
我想創建 oData 控制器來上傳文件
文件Dto
- 文件編號
- 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 結合時如何實現這一點。
提前致謝
本頁說明如何創建 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。更具體地說,它是類型!從Stream到byte[]。將內容髮佈為 Base64 字元串。