gpt4 book ai didi

c# - 用于文件上传的 OData v4 自定义操作

转载 作者:行者123 更新时间:2023-12-05 07:42:33 24 4
gpt4 key购买 nike

我有一个带有标准 CRUD 动词的 OData Controller 。一切正常。现在我需要添加一个自定义操作来执行文件上传。我尝试像这样向我现有的 Controller 添加一个方法:

[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 的一部分,在下面的示例中,我假设您的实体类型是 Attachment,并且您的 Controller 类名称是 AttachmentsController .按照惯例,您的 EntitySet 名称必须是 Attachments

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

上面语句的重要部分是返回类型,如果你没有在你的 EdmModel 中正确声明返回类型,那么你会发现你的端点返回 406 错误 - Not Acceptable ,即使你的方法正确执行,这真的很困惑你第一次遇到它。这是因为在完成响应之前,OData 仍会尝试解析您的响应以匹配请求中的 Accept header 。

Try to use 'nameof' when mapping functions and actions instead of 'magic strings' or constants so that the compiler can pickup basic issues like wrongly defined route.

使用这种方法,您不需要方法 header 上的 Route 属性,并且操作将包含在元数据文档中,因此会输出 swagger。

关于c# - 用于文件上传的 OData v4 自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44401248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com