Skip to content

Commit 1b98d04

Browse files
committed
try
1 parent d796fec commit 1b98d04

File tree

3 files changed

+55
-14
lines changed

3 files changed

+55
-14
lines changed

src/Http/samples/FileManagerSample/FileController.cs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
namespace FileManagerSample;
88

99
[ApiController]
10-
[Route("[controller]")]
10+
[Route("controller")]
1111
public class FileController : ControllerBase
1212
{
13-
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/file/upload
13+
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/controller/upload
1414
[HttpPost]
1515
[Route("upload")]
1616
public async Task<IActionResult> Upload()
@@ -33,7 +33,7 @@ public async Task<IActionResult> Upload()
3333
return Ok($"File '{file.Name}' uploaded.");
3434
}
3535

36-
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/file/upload-cts
36+
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/controller/upload-cts
3737
[HttpPost]
3838
[Route("upload-cts")]
3939
public async Task<IActionResult> UploadCts(CancellationToken cancellationToken)
@@ -55,10 +55,10 @@ public async Task<IActionResult> UploadCts(CancellationToken cancellationToken)
5555
return Ok($"File '{file.Name}' uploaded.");
5656
}
5757

58-
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/file/upload-cts-noop
58+
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/controller/upload-cts-noop
5959
[HttpPost]
6060
[Route("upload-cts-noop")]
61-
public async Task<IActionResult> UploadCtsNoop(CancellationToken cancellationToken)
61+
public IActionResult UploadCtsNoop(CancellationToken cancellationToken)
6262
{
6363
// 1. form feature initialization
6464
// 2.calling `FormFeature.InnerReadFormAsync()`
@@ -67,10 +67,10 @@ public async Task<IActionResult> UploadCtsNoop(CancellationToken cancellationTok
6767
return Ok($"Noop completed.");
6868
}
6969

70-
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/file/upload-str-noop
70+
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/controller/upload-str-noop
7171
[HttpPost]
7272
[Route("upload-str-noop")]
73-
public async Task<IActionResult> UploadStrNoop(string str)
73+
public IActionResult UploadStrNoop(string str)
7474
{
7575
// 1. form feature initialization
7676
// 2.calling `FormFeature.InnerReadFormAsync()`
@@ -79,10 +79,10 @@ public async Task<IActionResult> UploadStrNoop(string str)
7979
return Ok($"Str completed.");
8080
}
8181

82-
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/file/upload-str-query
82+
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/controller/upload-str-query
8383
[HttpPost]
8484
[Route("upload-str-query")]
85-
public async Task<IActionResult> UploadStrQuery([FromQuery] string str)
85+
public IActionResult UploadStrQuery([FromQuery] string str)
8686
{
8787
// 1. form feature initialization
8888
// 2.calling `FormFeature.InnerReadFormAsync()`
@@ -91,15 +91,27 @@ public async Task<IActionResult> UploadStrQuery([FromQuery] string str)
9191
return Ok($"Query completed.");
9292
}
9393

94-
// curl -X POST -F "file=@D:\.other\big-files\bigfile.dat" http://localhost:5000/file/upload-query-param/1
94+
// curl -X POST -F "file=@D:\.other\big-files\bigfile_50mb.dat" http://localhost:5000/controller/upload-route-param/1
9595
[HttpPost]
96-
[Route("upload-query-param/{id}")]
97-
public async Task<IActionResult> UploadQueryParam([FromQuery] string id)
96+
[Route("upload-route-param/{id}")]
97+
public IActionResult UploadQueryParam(string id)
9898
{
9999
// 1. form feature initialization
100100
// 2.calling `FormFeature.InnerReadFormAsync()`
101101
// 3. endpoint handler
102102

103103
return Ok($"Query completed: query id = {id}");
104104
}
105+
106+
// curl -X POST -F "file=@D:\.other\big-files\bigfile_50mb.dat" http://localhost:5000/controller/upload-file
107+
[HttpPost]
108+
[Route("upload-file")]
109+
public IActionResult UploadForm([FromForm] IFormFile file)
110+
{
111+
// 1. form feature initialization
112+
// 2.calling `FormFeature.InnerReadFormAsync()`
113+
// 3. endpoint handler
114+
115+
return Ok($"File '{file.FileName}' uploaded.");
116+
}
105117
}

src/Mvc/Mvc.Core/src/ModelBinding/FormValueProviderFactory.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,28 @@ public Task CreateValueProviderAsync(ValueProviderFactoryContext context)
2222
var request = context.ActionContext.HttpContext.Request;
2323
if (request.HasFormContentType)
2424
{
25+
RegisterValueProvider(context);
26+
2527
// Allocating a Task only when the body is form data.
26-
return AddValueProviderAsync(context);
28+
//return AddValueProviderAsync(context);
2729
}
2830

2931
return Task.CompletedTask;
3032
}
3133

34+
private static void RegisterValueProvider(ValueProviderFactoryContext context)
35+
{
36+
var valueProvider = new FormValueProvider(
37+
BindingSource.Form,
38+
new FormCollection(fields: null, files: null),
39+
CultureInfo.CurrentCulture);
40+
41+
context.ValueProviders.Add(valueProvider);
42+
}
43+
44+
#pragma warning disable IDE0051 // Remove unused private members
3245
private static async Task AddValueProviderAsync(ValueProviderFactoryContext context)
46+
#pragma warning restore IDE0051 // Remove unused private members
3347
{
3448
var request = context.ActionContext.HttpContext.Request;
3549
IFormCollection form;

src/Mvc/Mvc.Core/src/ModelBinding/JQueryFormValueProviderFactory.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Globalization;
77
using Microsoft.AspNetCore.Http;
88
using Microsoft.AspNetCore.Mvc.Core;
9+
using Microsoft.Extensions.Primitives;
910

1011
namespace Microsoft.AspNetCore.Mvc.ModelBinding;
1112

@@ -22,14 +23,28 @@ public Task CreateValueProviderAsync(ValueProviderFactoryContext context)
2223
var request = context.ActionContext.HttpContext.Request;
2324
if (request.HasFormContentType)
2425
{
26+
RegisterValueProvider(context);
27+
2528
// Allocating a Task only when the body is form data.
26-
return AddValueProviderAsync(context);
29+
// return AddValueProviderAsync(context);
2730
}
2831

2932
return Task.CompletedTask;
3033
}
3134

35+
private static void RegisterValueProvider(ValueProviderFactoryContext context)
36+
{
37+
var valueProvider = new JQueryFormValueProvider(
38+
BindingSource.Form,
39+
values: new Dictionary<string, StringValues>(),
40+
CultureInfo.CurrentCulture);
41+
42+
context.ValueProviders.Add(valueProvider);
43+
}
44+
45+
#pragma warning disable IDE0051 // Remove unused private members
3246
private static async Task AddValueProviderAsync(ValueProviderFactoryContext context)
47+
#pragma warning restore IDE0051 // Remove unused private members
3348
{
3449
var request = context.ActionContext.HttpContext.Request;
3550

0 commit comments

Comments
 (0)