首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件上载的OData v4自定义操作

文件上载的OData v4自定义操作
EN

Stack Overflow用户
提问于 2017-06-06 23:30:51
回答 1查看 1.1K关注 0票数 3

我有一个带有CRUD标准谓词的OData控制器。一切都很好。现在我需要添加一个自定义操作来执行文件上传。我尝试在我现有的控制器中添加如下方法:

代码语言:javascript
复制
[HttpPost]
[Route("UploadFile")]
public async Task<HttpResponseMessage> UploadFile()
{
    //handle uploaded content logic here...
}

但是当我试图通过写一个帖子来调用它时:

http://localhost/UploadFile

我知道这个错误:

代码语言:javascript
复制
System.InvalidOperationException: No non-OData HTTP route registered.

对于允许文件上传的自定义操作,我应该做什么?

EN

回答 1

Stack Overflow用户

发布于 2018-01-31 22:17:59

您需要将Action声明为EdmModel的一部分,在下面的示例中,我假设您的实体类型是附件,而控制器类名为AttachmentsController。按照惯例,您的EntitySet名称必须是附件。

代码语言:javascript
复制
var attachments = builder.EntitySet<Attachment>("Attachments");
attachments.Action(nameof(AttachmentsController.UploadFile))
    .Returns<System.Net.Http.HttpResponseMessage>();

上述语句的重要部分是返回类型,如果您没有在EdmModel中正确声明返回类型,那么您将发现您的端点返回了406个错误--即使您的方法执行正确,这在您第一次遇到它时也会非常混乱。这是因为在完成响应之前,OData仍然会尝试解析您的响应,以匹配来自请求的Accept。

在映射函数和操作时,尝试使用“nameof”,而不是“魔术字符串”或常量,这样编译器就可以处理诸如错误定义的路由之类的基本问题。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44401248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档