当前位置: 首页 > 知识库问答 >
问题:

如何大摇大摆地记录一个直接读取Request.BodyASP.NET核心操作

别帅
2023-03-14

我有一个控制器动作方法来读取< code >请求。Body直接(而不是使用File)用于流式传输和其他目的。问题是没有模型绑定,因此Swagger不记录合同。例如:

[HttpPost("upload")]
[DisableFormValueModelBinding]
public async Task<IActionResult> UploadAsync()
{
  // Read from Request.Body manually, expecting content type to be multipart/*
  return Ok();
}

加载 Swagger UI 时,无法上传文件等。

有没有办法用 ASP.NET 核心中的属性来支持这一点?

共有1个答案

黄修永
2023-03-14

API:

 [HttpPost]  
    public async Task<IActionResult> Post(  
        [FromForm(Name = "myFile")]IFormFile myFile)  
    {  
            using (var fileContentStream = new MemoryStream())  
            {  
                await myFile.CopyToAsync(fileContentStream);  
                await System.IO.File.WriteAllBytesAsync(Path.Combine(folderPath, myFile.FileName), fileContentStream.ToArray());  
            }  
            return CreatedAtRoute(routeName: "myFile", routeValues: new { filename = myFile.FileName }, value: null); ;  
    }  

操作过滤器

public class SwaggerFileOperationFilter : IOperationFilter  
{  
    public void Apply(Operation operation, OperationFilterContext context)  
    {  
        if (operation.OperationId == "Post")  
        {  
            operation.Parameters = new List<IParameter>  
            {  
                new NonBodyParameter  
                {  
                    Name = "myFile",  
                    Required = true,  
                    Type = "file",  
                    In = "formData"  
                }  
            };  
        }  
    }  
}  

启动-配置服务

services.AddSwaggerGen(  
    options =>  
    {  
        options.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info { Title = "My API", Version = "v1" });  

        options.OperationFilter<SwaggerFileOperationFilter>();  
    });  

来源是:在此输入链接说明

 类似资料:
  • 理想情况下,我们将有一个显示所有标记为public的控制器/方法的大摇大摆的页面,以及另一个显示所有endpoint的密码安全endpoint。这可能吗?

  • 我有一个java项目(tomcat webapp)和一些REST Api。我想为他们生成大摇大摆的文档。我从本教程(github)开始。我没有maven我们使用蚂蚁任务。我加入了swagger-annotations-1.5.0。jar和所有随swagger jaxrs jar 1.5.0版本附带的jar(如果有用的话,我可以包括一个完整的列表),我已经注释了一些方法,我有一个如下的配置类: }

  • 我正在尝试验证swagger文件(实际上是我的gradle构建的一部分)。我曾经尝试过使用swagger解析器,但尽管它可以工作,如果swagger根本不进行解析,就会出现错误,但它似乎无法以这种方式捕获问题http://editor.swagger.io/#/做(这就是我要找的。) 当然,这是一个很常见的问题,一定有办法做到这一点? 我所尝试的: build.gradle: 有一些明显问题的简单

  • 我想大摇大摆地发布一个json正文,就像这样: 目前,我有这样的定义: 但是数据是在URL中发送的。这里是Swagger提供的生成的curl: 我知道<code>查询</code>关键字不好,但我没有找到POST JSON正文的方法。我尝试了<code>formData</code>,但没有成功。

  • 我创建了一个新的Web Api项目,添加了ASP.NET标识并配置了OAuth,如下所示: 谢了。 另外,我应该说Swagger文档对我所有的控制器都适用,只是我忽略了一个明显的方法--如何登录。

  • 我正在使用Swagger创建一个文档页面,我想自动添加从正确的调用中收到的访问令牌。我试着用它 接收和存储令牌,以及 但是,要通过标头将其传递到后续请求,这只适用于一次调用,之后令牌将恢复为<code>null</code>。 如何防止值被还原?