2017-05-30 30 views
1

単純なファイルをアップロードするアップロードメソッド(HTTPPOST)を追加しました。私はこのエラーを受け取り続け、どこから来たのか分からない。誰かがそれを説明できますか?ASP .Net Core Swagger UI IFormFileが動作しない

また、この質問にも答えることができる人がいますが、これは最も重要な問題ではありませんが、この操作フィルタにファイル拡張フィルタを渡すことはできますか?たとえば、.csvだけを受け入れることはできますか?それとも、バックエンドのようにフロントエンドで後で行うべきことは、すでにアップロードしているときにどの拡張機能があるかを確認することですか?

ERROR:1

ポスト方法:

[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

関連する問題