【问题标题】:How to read file from angular post in web api?如何从 web api 中的角度帖子中读取文件?
【发布时间】:2016-03-31 10:35:31
【问题描述】:

我成功实现了基于 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
堆栈跟踪
在 System.Web.HttpRequest.EnsureFiles()
在 System.Web.HttpRequest.get_Files()
在 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[] 方法参数)
在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor .ActionExecutor.Execute(Object 实例,Object[] 参数)
在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor .ExecuteAsync(HttpControllerContext 控制器上下文,IDictionary2 参数,CancellationToken cancelToken )

从先前抛出异常的位置结束堆栈跟踪

在 System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 任务)\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()

【问题讨论】:

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


    【解决方案1】:

    我像这样在 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[]的文件数据

    【讨论】:

    • 谢谢。通过查看您的代码,我得到了字节数组,然后我使用 System.Drawing 转换为 Image 并使用 Image.Save(''FileName",ImageFormat);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多