.Net Framework API 端点用于文件上传:无法使用 Postman 发出请求

问题描述 投票:0回答:1

我正在创建一个 .Net 框架(不是 DotNet Core)API 端点来上传文件,但我无法在 Visual Studio 中调试来自 Postman 的请求。我的应用程序使用 Swagger,我可以使用 Swagger 发出请求并进行调试,没有任何问题,但使用 Swagger 我无法显示“选择文件”按钮,因此我尝试使用 Postman。

我的方法虽然还没有完成,但看起来是这样的:

[HttpPost]
[Route("UploadVideo")]
public bool UploadVideo([FromBody] JObject pData, [FromUri] string videoTitle, [FromUri] string description,
                          [FromUri] short enterpriseId, [FromUri] int userId, [FromUri] int applicationId)
{
       string lFileBase64 = pData["file"]["File64Code"].ToString();
       string lFileName = pData["file"]["FileName"].ToString();
            Dictionary<string, string> exportParams = new Dictionary<string, string>();
       exportParams.Add("TYPE", ((int)RequestType.UsersImport).ToString());
       exportParams.Add("PFK_ENTERPRISE", enterpriseId.ToString());
       exportParams.Add("PK_USER", userId.ToString());
       exportParams.Add("PK_APPLICATION", applicationId.ToString());
       exportParams.Add("FILE_NAME", lFileName);

       Models.RequestLog requestLog = new Models.RequestLog();
       requestLog.Data = RequestLogService.ParseRequestParams(exportParams);
       requestLog.Type = RequestType.UsersImport;

       int requestId = RequestLogService.CreateRequestLog(enterpriseId, userId,
                 Mapper.Map<RequestLog>(requestLog));

       if (requestId > 0)
       {
         //update request status
         exportParams.Add("PK_REQUEST", requestId.ToString());
         requestLog.Id = requestId;
         requestLog.Status = RequestStatus.Sent;
         requestLog.Data = RequestLogService.ParseRequestParams(exportParams); ;
         RequestLogService.UpdateRequestLog(enterpriseId, userId,
                    Mapper.Map<RequestLog>(requestLog));

         string pCloudStorageAccount = AzureHelper.SelectAzureStorageAccount(enterpriseId);
         string pContainer = "docstmp" + AzureStorageSettings.AzureStorageContainer;
         MemoryStream myStream = new MemoryStream(Convert.FromBase64String(lFileBase64));
         Guid guid = Guid.NewGuid();
         lFileName = "UploadVideo_" + enterpriseId.ToString() + "_" + guid.ToString() + ".mp4";
         string urlAzure = AzureStorageHelpers.UploadFile(pCloudStorageAccount, pContainer, lFileName, myStream);
         exportParams.Add("URL", urlAzure);

         requestLog.Data = RequestLogService.ParseRequestParams(exportParams);
         RequestLogService.QueueRequest(enterpriseId, userId,
             Mapper.Map<RequestLog>(requestLog));
       }
       else
       {
         return false;
       }

       return true;
}

但该方法与此处无关,因为我的问题是邮递员未到达端点。

在下面的图片中,您可以看到抛出错误的 Postman 请求的详细信息。

接下来我可以尝试什么?

编辑1

从 Swagger 获得的额外信息可能会有帮助:

"/api/Catalogues/UploadVideo":{
   "post":{
      "tags":[
         "Catalogues"
      ],
      "operationId":"Catalogues_UploadVideo",
      "consumes":[
         "application/json",
         "text/json",
         "application/x-www-form-urlencoded"
      ],
      "produces":[
         "application/json",
         "text/json"
      ],
      "parameters":[
         {
            "name":"pData",
            "in":"body",
            "required":true,
            "schema":{
               "type":"object"
            }
         },
         {
            "name":"videoTitle",
            "in":"query",
            "required":true,
            "type":"string"
         },
         {
            "name":"description",
            "in":"query",
            "required":true,
            "type":"string"
         },
         {
            "name":"enterpriseId",
            "in":"query",
            "required":true,
            "type":"integer",
            "format":"int32"
         },
         {
            "name":"userId",
            "in":"query",
            "required":true,
            "type":"integer",
            "format":"int32"
         },
         {
            "name":"applicationId",
            "in":"query",
            "required":true,
            "type":"integer",
            "format":"int32"
         }
      ],
      "responses":{
         "200":{
            "description":"OK",
            "schema":{
               "type":"boolean"
            }
         }
      }
   }
}

编辑2

已在 Postman 中禁用 SSL 证书验证:

c# api file-upload postman
1个回答
0
投票

在邮递员中,您使用

form (body)
发送所有数据。您的端点期望通过 URL 作为查询参数发送除视频之外的所有值。

在邮递员中,将所有值添加到

Params
选项卡,然后将视频添加到
Body
选项卡。

端点属性上的属性,您已经说明了这一点。

[FromBody]
表示随
POST
一起发送的表格。
[FromUri]
告诉端点它期望在 URL 本身中包含一个值。

您的招摇示例中也概述了这一点:

身体

"name":"pData",
"in":"body" //<--this

查询

"name":"videoTitle",
"in":"query", //<--this

编辑: 我建议遵循this MS 文档。使用正确的方法上传大文件。

© www.soinside.com 2019 - 2024. All rights reserved.