- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将项目中的大部分/所有 API 从“纯”WCF 转移到 Odata,并为此使用 OWIN 托管的 Odata enpoint。
我目前遇到的一个问题是文件。我有 2 个区域需要将 ZIP 文件上传到服务器进行处理。在一种情况下,它附加到一个实体(称为“存储库”)并包含未通过 Odata 公开的二进制内容(它只是上传)。另一方面,这是针对未绑定(bind)的操作,ZIP 文件包含将创建/更改多个实体的配置文件。
这对 OData 可行吗,还是我应该为此忽略 Odata 并使用“手动配置”的标准端点?由于暴露了元数据,我真的很想将其保留在 Odata 中。
在任何人发表评论之前 - 我一直在尝试通过谷歌查找文档,但一直没有得到相关答案。我得到的答案表明这是可能的,但所有的答案都有指向旧 WCF 级别 API 的代码示例,而我使用的是 WebApi。 http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint 处的文档不赘述太多细节。它没有显示操作的参数配置允许的类型以及如何配置它以通过来自 Web 表单的 http post 接受文件(和客户端,因为我需要两者)。
最佳答案
这是一个有用的链接,其中包含有关 Web API 中 OData 的媒体资源支持的文档:https://blogs.msdn.microsoft.com/mrtechnocal/2013/10/31/media-resource-support-for-odata-in-web-api/
您可以稍微简化链接中建议的实现,但可以肯定的是,您需要:
因此,对于 Controller ,您可以:
public abstract class YourMediaResourceODataController<TEntity, TKey>
: ODataController where TEntity : class
{
}
然后是真正的控制者:
public class YourController : YourMediaResourceODataController<YourZIPObjectEntity, string>
{
// This would be the post
public async Task<IHttpActionResult> Post()
{
var stream = await Request.Content.ReadAsStreamAsync();
// Manage the stream
}
// The get (if you want it, you will need to code the custom EntityRoutingConvention).
[HttpGet]
public HttpResponseMessage GetMediaResource(string key)
{
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var theZIPFile = yourZIPFileService.GetZIPFileByKey(key);
StreamContent contentResult;
using(var ms = new MemoryStream(theZIPFile.theByteArray)
{
contentResult = new StreamContent(ms);
}
result.Content = contentResult;
return result;
}
}
您将需要一个具有 Stream/byte[]/string 属性的实体 YourZIPObjectEntity
,具体取决于您管理二进制文件的方式。 (在文档示例中,这是 Image
类)。对于该实体,您需要指定它在 ODataConfig 中有一个流(请参阅文档中的“设置 Web API 配置”部分)。
我想差不多就是这些了。</p>
然后,您可以通过代码将 ZIP 文件作为 StreamContent 发布:
using(var requestContent = new MemoryStream(yourByteArray))
using(var request = new HttpRequestMessage(HttpMethod.POST, yourPOSTUri)
{
request.Content = new StreamContent(requestContent);
// Set headers and send the request...
}
我希望这是您正在寻找的解决方案,或者至少是一种解决方法。
关于c# - Web Api 和 Odata - 适用于文件管理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36573052/
如何在 C# 中检测两个文件是否完全相同(大小、内容等)? 最佳答案 这是一个简单的解决方案,它只读取两个文件并比较数据。它应该不会比散列方法慢,因为这两种方法都必须读取整个文件。 编辑 正如其他人所
我正在为我的工作编写一个简单的文档管理系统。我只是一个爱好者,但已经编程了一段时间了。我的问题是这样的。当我通过我的应用程序删除了一些文档时,我需要删除相关的数据库记录。如果抛出异常,最好的解决方法是
我已经使用 Xcode 一段时间了。一直困扰我的一件事是它处理文件的方式。我喜欢将我的文件全部放在嵌套文件夹中,而不是一个大的物理文件夹中,但是默认情况下,当您在 Xcode 中创建一个组时,它不会创
我正在使用 DNN 5.6.2,并且正在尝试构建一个自定义模块,用户可以在其中上传我对其运行验证的文件。如果文件有效,则将其保存。模块创建了一个根级目录“DataValidation”,并且模块的每个
我一直在尝试在某些目录中创建文件,但一直无法弄清楚。 重点是在包dir中创建文本文件:com.resources.files但我的想法不起作用。 public boolean archiveFile(
我们使用 Realm 一段时间了,我们的一些用户遇到了一些与 Realm 相关的数据丢失问题。我们认为我们已经将范围缩小到文件变得太大时的压缩方法。我们想就这是否是重新创建 Realm 文件的正确方法
我正在学习 Linux,我需要创建一个允许输入重定向 (stdin) 和输出重定向 (stdout) 的函数。我发现了一个示例,其中实际创建了一个文件文本,该文件文本的名称是我选择的名称。但是我不明白
我正在做我的学校作业,我遇到了我的第一个主要障碍......我无法写入文件,甚至无法使用 scanf 和 fgets 检索输入。 问题一: FILE *f1; char date_trans[100]
我的猜测是错误的,与答案无关。这个问题不再有效。请参阅my answer 。很抱歉这个糟糕的问题。 Tl;dr 版本 为什么 Java 进程无法找到某个文件,直到另一个进程(创建该文件的进程)完成执行
如何在 java 中过滤单引号 '? 我有一个搜索框,如果有人输入单引号,我会收到一个数据库错误。 我不想在 JavaScript 或数据库级别对其进行归档;我只想用 Java 来做。我该怎么做? 我
我是 ios 开发的新手,我遇到了与内存管理和处理大型数据集的方法有关的问题。 现在,我正在加载 csv 文件并将相关数据作为对象存储在应用程序初始化时的内存中。一些 csv 文件大于 1MB,我的应
我正在构建一个包含我自己的 *.c 和 *.h 文件的小型库,但我不确定应该如何管理它们,尤其是在将它们包含到项目中时。我在 Ubuntu 上使用 Codeblocks 以防万一。对于每个 .c/.h
我正在为我的数据结构编程课做大学作业。我们正在为这项任务分组工作,所以我目前正在处理我的一个队友项目。我添加了本地 READ/WRITE 代码,这样我就可以将数组列表保存到本地 .dat 文件中。但是
我在上传文件时使用数据库来命名文件,我的应用程序使用数据库来识别文件(用于视频流),因此它们需要相同。但是,如果上传失败,或者有人取消上传,我就会留下一个浪费的 ID。 加类 我有更多浪费的 ID 号
我的想法是创建一个包含服务的 .jar 文件 由 Spring 管理,应该由 getBean() 获取 我想把它放到 Web-app 的 WEB-INF/lib 然后在网络应用程序 Servlet 中
我在 Rails 开发中使用 SASS 文件。我想知道我是否应该gitignore 生成 CSS 文件。 在 Git 中添加 CSS 文件的问题在于它们只是多余的。public/stylesheets
我目前正在尝试编写一个 Maven 插件,它应该能够在“生成资源”阶段创建/处理一些资源文件。一切正常,但在此过程中我的插件需要读取一些其他文件作为输入,所以我决定使用 Apache Maven Fi
我是一名优秀的程序员,十分优秀!