ODATA V4自定义操作用于文件上传



我有一个带有CRUD标准动词的ODATA控制器。一切正常。现在,我需要添加一个自定义操作以执行文件上传。我尝试在这样的现有控制器中添加一种方法:

[HttpPost]
[Route("UploadFile")]
public async Task<HttpResponseMessage> UploadFile()
{
    //handle uploaded content logic here...
}

但是,当我尝试通过发表帖子来调用它时:

http://localhost/uploadfile

我得到此错误:

System.InvalidOperationException: No non-OData HTTP route registered.

我应该为此自定义操作做什么以允许上传?

您需要将操作声明为EDMMODEL的一部分,在以下示例中,我假设您的实体类型为附件,而您的控制器类名称为附件controller 。按照惯例,您的EntitySet名称必须为附件

var attachments = builder.EntitySet<Attachment>("Attachments");
attachments.Action(nameof(AttachmentsController.UploadFile))
    .Returns<System.Net.Http.HttpResponseMessage>();

上述语句的重要部分是返回类型,如果您在edmmodel中未正确声明返回类型,那么您将发现端点返回406错误 - 即使方法正确地执行,这确实使人感到困惑您第一次遇到它。这是因为ODATA仍将尝试解析您的响应,以匹配请求之前的Accept标头。

在映射功能和操作而不是"魔术字符串"或常数时尝试使用'namef'

使用这种方法,您不需要方法标头上的路由属性,并且该操作将包含在元数据文档中,因此将摇动输出。

最新更新