2017-05-30 115 views
1

我增加了一個上傳的方法(HTTPPOST)上傳一個簡單的文件。我不斷收到這個錯誤,不知道它來自哪裏。有人可以解釋嗎?ASP.NET的核心揚鞭UI IFormFile不行的

也許有別人誰可以回答這個問題爲好,這不是最重要的,但你可以通過文件擴展名過濾器,以這種操作過濾器?它只接受.csv例如?或者是我們後期應該在後端執行的操作,檢查它已經上傳時的擴展名?

錯誤:1

POST方法:

[HttpPost] 
[Consumes("multipart/form-data")] 
public void Post(IFormFile file) 
{ 
} 

OperationFilter:

public class FormFileOperation : IOperationFilter 
{ 
    private const string FormDataMimeType = "multipart/form-data"; 
    private static readonly string[] FormFilePropertyNames = typeof(IFormFile).GetTypeInfo().DeclaredProperties.Select(x => x.Name).ToArray(); 

    public void Apply(Operation operation, OperationFilterContext context) 
    { 
     if (context.ApiDescription.ParameterDescriptions.Any(x => x.ModelMetadata.ContainerType == typeof(IFormFile))) 
     { 
      var formFileParameters = operation 
       .Parameters 
       .OfType<NonBodyParameter>() 
       .Where(x => FormFilePropertyNames.Contains(x.Name)) 
       .ToArray(); 
      var index = operation.Parameters.IndexOf(formFileParameters.First()); 
      foreach (var formFileParameter in formFileParameters) 
      { 
       operation.Parameters.Remove(formFileParameter); 
      } 

      var formFileParameterName = context 
       .ApiDescription 
       .ActionDescriptor 
       .Parameters 
       .Where(x => x.ParameterType == typeof(IFormFile)) 
       .Select(x => x.Name) 
       .First(); 
      var parameter = new NonBodyParameter() 
      { 
       Name = formFileParameterName, 
       In = "formData", 
       Description = "The file to upload.", 
       Required = true, 
       Type = "file" 
      }; 
      operation.Parameters.Insert(index, parameter); 

      if (!operation.Consumes.Contains(FormDataMimeType)) 
      { 
       operation.Consumes.Add(FormDataMimeType); 
      } 
     } 
    } 
} 

回答

0

這有什麼好做招搖。招搖是規範而不是執行。 單程我會做的是停止接受任何其他文件擴展名。

這是僞代碼,你將需要改變和編譯。

[HttpPost("upload")] 
public async Task<IActionResult> Upload() 
{ 
    files = Request.Files; 
    foreach (var file in files) 
    { 
     if(!file.FileName.EndWith('.csv')) 
     continue; 

     Save/UploadFile 
    } 

    return Ok(); 
} 

我不會爲了文件上傳而過度設計它。

+0

對於文件擴展名。這正是我想,我只是想知道。 對於IFormFile使用我沒有和這有助於... – Condra963