如何在webapi中从angular post中读取文件

本文关键字:post 读取 文件 angular 中从 webapi | 更新日期: 2023-09-27 18:28:05

我成功地实现了基于OWIN的令牌身份验证。

但在实现这一点之前,当我尝试使用HttpContext.Current.Request.Files[i].FileName将已发布文件的多部分表单数据从我的angular应用程序获取到web api时,它会很容易地为我提供我想要的已发布文件。

但在实现了基于owin的令牌身份验证后,我无法获得发布的文件,并且在同一行出现了错误。

花更多的时间在这个错误上,我已经从互联网上找到了大部分答案,但我仍然无法解决我的问题。

提供的大多数解决方案都说,您无法在像这样的自托管容器中访问HttpContext.Current.Request

app.UseWebApi(config);

我真的很纠结,所以请帮帮我。

错误为:

行306是:HttpContext.Current.Request.Files[i].FileName

出现错误
ExceptionMessage:此方法或HttpRequest.GetBufferlessInputStream之后不支持属性已调用
异常类型:System.Web.HttpException
StackTrace
位于System.Web.HttpRequest.EnsureFiles()
位于System.Web.HttpRequest.get_Files()
位于Nullplex.Rest.Controller.UserBasicController.UpdateUserBasicByID(UserBasicUserBasic)在d:''BitBucket''PayBackRestApp中''Nullplex.Rest''Controllers''UserBasicController.cs:line 306
在lambda_method(闭包,Object,Object[])
位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutior.c__DisplayClass10.b_9(对象实例,Object[]方法参数)
位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object实例,Object[]参数)
位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary2arguments,CancellationToken CancellationToken)

从引发异常的前一位置开始的堆栈结束跟踪

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)''r''n位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
位于System.Runtime.CompilerServices.TaskAwaiter1.GetResult()
位于System.Web.Http.Controllers.ApiControllerActionInvoker.d_0.MoveNext()

从引发异常的前一位置开始的堆栈结束跟踪

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)''r''n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)''r''n在System.Runtime.CompilerServices.TaskAwaiter1.GetResult()
位于System.Web.Http.Controllers.ActionFilterResult.d_2.MoveNext()

如何在webapi中从angular post中读取文件

我在web api中读取了从angular发布的文件,如下

if (!this.Request.Content.IsMimeMultipartContent("form-data"))
{
    var provider = new MultipartMemoryStreamProvider();
    await this.Request.Content.ReadAsMultipartAsync(provider);
    var content = provider.Contents.First();
    var buffer = await content.ReadAsByteArrayAsync();

现在缓冲区包含作为byte[] 的文件数据