【发布时间】:2018-04-02 09:21:59
【问题描述】:
我已关注此tutorial 从 Azure Blob 存储上传/下载 Blob。
在我实现承载令牌身份验证(OAuth)之前,代码运行良好
我在从邮递员上传任何文件时遇到错误。以下是错误描述。
{ “消息”:“发生错误。详细信息:索引超出范围。必须为非负数且小于 集合。\r\n参数名称:索引" }
但是,文件已成功上传到我的 Blob 帐户中。但是,我仍然不断出现错误。
我已附上调试时获得的错误详细信息的图像。
我在上传控制器中提示错误的区域
try
{
await Request.Content.ReadAsMultipartAsync(provider);
}
catch (Exception ex)
{
return BadRequest($"An error has occured. Details: {ex.Message}");
}
我的 AzureStorageMultipartFormDataStreamProvider 类继承自 MultipartFormDataStreamProvider
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
{
if (parent == null) throw new ArgumentNullException(nameof(parent));
if (headers == null) throw new ArgumentNullException(nameof(headers));
// Generate a new filename for every new blob
var fileName = Guid.NewGuid().ToString();
CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(fileName);
headers.ContentLength = 0;
if (headers.ContentType != null)
{
// Set appropriate content type for your uploaded file
blob.Properties.ContentType = headers.ContentType.MediaType;
}
this.FileData.Add(new MultipartFileData(headers, blob.Name));
return blob.OpenWrite();
}
为了实现 Oauth2.0 身份验证,我刚刚在我的项目中添加了 Startup .cs 和 Startup.Auth.cs(带有所需的 NuGet 包 Owin)
这是我的 StackTrace
在 System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument 参数,ExceptionResource 资源)在 System.Collections.Generic.List
1.get_Item(Int32 index) at System.Net.Http.MultipartFormDataStreamProvider.<ExecutePostProcessingAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Net.Http.HttpContentMultipartExtensions.<ReadAsMultipartAsync>d__01.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime。 CompilerServices.TaskAwaiter`1.GetResult() 在 DemoAzureStorage.Controllers.UploadController.d__1.MoveNext()
【问题讨论】:
-
共享调用堆栈/堆栈跟踪。
-
@rene 更新了堆栈跟踪
标签: c# asp.net-web-api oauth-2.0 azure-blob-storage bearer-token