我成功实现了基于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()
答案 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[]