如何在web api中读取角度帖子中的文件?

时间:2015-12-25 10:21:34

标签: c# .net angularjs asp.net-web-api owin

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

但是在实现这个之前,当我尝试使用HttpContext.Current.Request.Files[i].FileName将我的角度应用程序中的多部分表单数据发布到web api时,它会轻松地为我提供我想要的文件。

但是在实施基于owin的令牌认证后,我无法获取发布的文件,并且在同一行上发生错误。

通过花费更多时间来解决这个错误,我找到了大部分来自互联网的答案,但我仍然无法解决我的问题。

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

app.UseWebApi(config);

我真的被困在这,所以请帮助我。

错误是:

  

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

     

发生错误。
  ExceptionMessage:此方法或   HttpRequest.GetBufferlessInputStream后不支持该属性   被引用。
  ExceptionType:System.Web.HttpException
  堆栈跟踪
  在System.Web.HttpRequest.EnsureFiles()
  在System.Web.HttpRequest.get_Files()
  at Nullplex.Rest.Controllers.UserBasicController.UpdateUserBasicByID(UserBasic   UserBasic)在d:\ BitBucket \ PayBackRestApp中   \ Nullplex.Rest \ Controllers \ UserBasicController.cs:第306行   在lambda_method(Closure,Object,Object [])
  在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10   .b__9(Object instance,Object [] methodParameters)
  在System.Web.Http.Controllers.ReflectedHttpActionDescriptor   .ActionExecutor.Execute(Object instance,Object [] arguments)
  在System.Web.Http.Controllers.ReflectedHttpActionDescriptor   .ExecuteAsync(HttpControllerContext controllerContext,IDictionary2   参数,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()

1 个答案:

答案 0 :(得分:4)

我在网页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();

now buffer包含文件数据byte[]