繁体   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