2
2
using Microsoft . AspNetCore . Builder ;
3
3
using Microsoft . AspNetCore . Hosting ;
4
4
using Microsoft . AspNetCore . Http ;
5
+ using Microsoft . AspNetCore . Mvc ;
6
+ using Microsoft . AspNetCore . Routing . Constraints ;
5
7
using Microsoft . Extensions . Logging ;
8
+ using RestSharp . Extensions ;
6
9
using RestSharp . Tests . Shared . Extensions ;
7
10
8
11
namespace RestSharp . IntegrationTests . Fixtures ;
@@ -42,20 +45,46 @@ public HttpServer(ITestOutputHelper output = null) {
42
45
// ReSharper disable once ConvertClosureToMethodGroup
43
46
_app . MapGet ( "status" , ( int code ) => Results . StatusCode ( code ) ) ;
44
47
_app . MapGet ( "headers" , HandleHeaders ) ;
48
+ _app . MapDelete ( "delete" , ( ) => new TestResponse { Message = "Works!" } ) ;
45
49
46
50
// PUT
47
51
_app . MapPut (
48
52
"content" ,
49
53
async context => {
50
- var content = await context . Request . Body . StreamToStringAsync ( ) ;
54
+ var content = await context . Request . Body . StreamToStringAsync ( ) ;
51
55
await context . Response . WriteAsync ( content ) ;
52
56
}
53
57
) ;
54
58
59
+ // Upload file
60
+ var assetPath = Path . Combine ( AppDomain . CurrentDomain . BaseDirectory , "Assets" ) ;
61
+
62
+ _app . MapPost ( "/upload" , HandleUpload ) ;
63
+
55
64
IResult HandleHeaders ( HttpContext ctx ) {
56
65
var response = ctx . Request . Headers . Select ( x => new TestServerResponse ( x . Key , x . Value ) ) ;
57
66
return Results . Ok ( response ) ;
58
67
}
68
+
69
+ async Task < IResult > HandleUpload ( HttpRequest req ) {
70
+ if ( ! req . HasFormContentType ) {
71
+ return Results . BadRequest ( "It's not a form" ) ;
72
+ }
73
+
74
+ var form = await req . ReadFormAsync ( ) ;
75
+ var file = form . Files [ "file" ] ;
76
+
77
+ if ( file is null ) {
78
+ return Results . BadRequest ( "File parameter 'file' is not present" ) ;
79
+ }
80
+
81
+ await using var stream = file . OpenReadStream ( ) ;
82
+
83
+ var received = await stream . ReadAsBytes ( default ) ;
84
+ var expected = await File . ReadAllBytesAsync ( Path . Combine ( assetPath , file . FileName ) ) ;
85
+
86
+ return Results . Ok ( new UploadResponse ( file . FileName , file . Length , received . SequenceEqual ( expected ) ) ) ;
87
+ }
59
88
}
60
89
61
90
public Uri Url => new ( Address ) ;
@@ -70,4 +99,8 @@ public async Task Stop() {
70
99
71
100
record TestServerResponse ( string Name , string Value ) ;
72
101
102
+ record UploadRequest ( string Filename , IFormFile File ) ;
103
+
104
+ record UploadResponse ( string FileName , long Length , bool Equal ) ;
105
+
73
106
record ContentResponse ( string Content ) ;
0 commit comments