簡體   English   中英

用於文件上傳的OData v4自定義操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM