Dreamescaper / GenerateAspNetCoreClient

DotNet tool to generate HTTP client classes from ASP.NET Core api controllers.
MIT License
63 stars 5 forks source link

Incorrect handling of [FromForm] parameter #19

Closed Ar4ics closed 9 months ago

Ar4ics commented 10 months ago

After the line probably missing continue keyword.

Considering following code:

[ApiController]
[Route("[controller]/[action]")]
public class TestController
{
    [HttpPost]
    [Consumes("multipart/form-data")]
    public void Post([FromForm] TestModel testModel)
    {
    }
}

public class TestModel
{
    public IFormFile File { get; set; }

    public string String { get; set; }
}

Utility generates:

[Multipart]
[Post("/Test/Post")]
Task Post(MultipartItem testModel, [Body(BodySerializationMethod.UrlEncoded)] TestModel testModel = null);

This code will not work, because it contains duplicate parameter, and if rename it then Refit library would throw System.ArgumentException: Multipart requests may not contain a Body parameter.

If split parameters from model, the code will work correctly:

[Multipart]
[Post("/Test/Post")]
Task Post(MultipartItem file, string @string);

If Im understanding correctly, [FromForm] model should be splitted in separate parameters, if it contains IFormFile parameter.

Dreamescaper commented 9 months ago

I assume that makes sense. Thanks for the suggestion!