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

.Net Framework API endpoint for file upload: Cannot make a request with Postman

我正在创建一个 .Net 框架(不是 DotNet Core)API 端点来上传文件,但我无法调试来自 Postman 的 Visual Studio 请求中的请求。我的应用程序使用 Swagger,我可以使用 Swagger 发出请求并毫无问题地进行调试,除了使用 Swagger 我无法显示“Select 文件”按钮,所以我正在尝试使用 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 没有到达终点。

在下面的图片中,您可以看到抛出错误的 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 证书验证:

在您的邮递员中,您正在使用 form (body) 发送所有数据。您的端点期望除视频外的所有值都通过 URL 作为查询参数发送。

在 postman 中,将所有值添加到 Params 选项卡,然后将视频添加到 Body 选项卡。

你端点上的属性,你已经说明了这一点。 [FromBody] 表示与 POST 一起发送的表单。 [FromUri] 告诉端点它期望一个值包含在 URL 本身中。

这也在您的 swagger 示例中进行了概述:

正文

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

查询

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

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