Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions src/NSwag.CodeGeneration.CSharp.Tests/BinaryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -500,5 +500,51 @@ public async Task When_multipart_inline_schema()
await VerifyHelper.Verify(code);
CSharpCompiler.AssertCompile(code);
}

[Fact]
public async Task When_response_body_is_binary_then_IActionResult_is_used_as_return_type_in_CSharp_ASPNETCore()
{
var yaml = @"openapi: 3.0.0
servers:
- url: https://www.example.com/
info:
version: '2.0.0'
title: 'Test API'
paths:
/logo:
get:
tags:
- Files
summary: 'Get logo'
operationId: getLogo
responses:
'200':
description: 'something'
content:
image/png:
schema:
type: string
format: binary";

var document = await OpenApiYamlDocument.FromYamlAsync(yaml);

// Act
CSharpControllerGeneratorSettings settings = new CSharpControllerGeneratorSettings
{
ControllerTarget = CSharpControllerTarget.AspNetCore,
ControllerStyle = CSharpControllerStyle.Abstract,
UseActionResultType = true,

};

var codeGenerator = new CSharpControllerGenerator(document, settings);
var code = codeGenerator.GenerateFile();

// Assert
await VerifyHelper.Verify(code);
CSharpCompiler.AssertCompile(code);
Assert.DoesNotContain("ActionResult<Microsoft.AspNetCore.Mvc.FileResult>", code);
Assert.Contains("System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.IActionResult> GetLogo", code);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@


namespace MyNamespace
{
using System = global::System;


public abstract class ControllerBase : Microsoft.AspNetCore.Mvc.ControllerBase
{
[Microsoft.AspNetCore.Mvc.HttpGet, Microsoft.AspNetCore.Mvc.Route("logo")]
public abstract System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.IActionResult> GetLogo();

}



public partial class FileResponse : System.IDisposable
{
private System.IDisposable _client;
private System.IDisposable _response;

public int StatusCode { get; private set; }

public System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> Headers { get; private set; }

public System.IO.Stream Stream { get; private set; }

public bool IsPartial
{
get { return StatusCode == 206; }
}

public FileResponse(int statusCode, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.IO.Stream stream, System.IDisposable client, System.IDisposable response)
{
StatusCode = statusCode;
Headers = headers;
Stream = stream;
_client = client;
_response = response;
}

public void Dispose()
{
Stream.Dispose();
if (_response != null)
_response.Dispose();
if (_client != null)
_client.Dispose();
}
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public override string ResultType
{
case "void":
case "FileResult":
case "Microsoft.AspNetCore.Mvc.FileResult":
return "System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.IActionResult>";
default:
return "System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.ActionResult<" + SyncResultType + ">>";
Expand Down
Loading