[英]OData v4 Custom Action for File Upload
我有一個帶有用於CRUD的標准動詞的OData控制器。 一切正常。 現在,我需要添加一個自定義操作來執行文件上傳。 我嘗試像這樣向現有控制器添加方法:
[HttpPost]
[Route("UploadFile")]
public async Task<HttpResponseMessage> UploadFile()
{
//handle uploaded content logic here...
}
但是,當我嘗試通過POST調用它時:
http:// localhost / UploadFile
我收到此錯誤:
System.InvalidOperationException: No non-OData HTTP route registered.
對於允許文件上傳的自定義操作,我應該怎么做?
您需要將Action聲明為EdmModel的一部分,在以下示例中,我假設您的Entity Type是Attachment ,並且您的控制器類名稱是AttachmentsController 。 按照約定,您的EntitySet名稱必須為Attachments
var attachments = builder.EntitySet<Attachment>("Attachments");
attachments.Action(nameof(AttachmentsController.UploadFile))
.Returns<System.Net.Http.HttpResponseMessage>();
上面語句的重要部分是返回類型,如果您未在EdmModel中正確聲明返回類型,則將發現端點返回406錯誤-即使您的方法執行正確,這也是無法接受的,這在第一次使您感到困惑你碰到它了。 這是因為OData在完成響應之前仍會嘗試解析您的響應以匹配請求中的Accept標頭。
映射函數和操作時,請嘗試使用“ nameof”,而不是“魔術字符串”或常量,以便編譯器可以解決諸如錯誤定義路由之類的基本問題。
使用這種方法,您不需要方法標題上的Route屬性,並且該操作將包含在元數據文檔中,因此會產生搖搖欲墜的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.