3
3
4
4
using System . Security . Claims ;
5
5
using Microsoft . AspNetCore . Builder ;
6
- using Microsoft . AspNetCore . Http ;
7
6
using Microsoft . AspNetCore . Mvc ;
8
7
using Microsoft . AspNetCore . Routing ;
9
8
using TodoApp . Models ;
@@ -19,10 +18,8 @@ public static IEndpointRouteBuilder MapApiRoutes(this IEndpointRouteBuilder buil
19
18
builder . MapGet ( "/api/items" , async (
20
19
ITodoService service ,
21
20
ClaimsPrincipal user ,
22
- CancellationToken cancellationToken ) =>
23
- {
24
- return await service . GetListAsync ( user . GetUserId ( ) , cancellationToken ) ;
25
- } ) . RequireAuthorization ( ) ;
21
+ CancellationToken cancellationToken ) => await service . GetListAsync ( user . GetUserId ( ) , cancellationToken ) )
22
+ . RequireAuthorization ( ) ;
26
23
27
24
// Get a specific Todo item
28
25
builder . MapGet ( "/api/items/{id}" , async (
@@ -32,13 +29,7 @@ public static IEndpointRouteBuilder MapApiRoutes(this IEndpointRouteBuilder buil
32
29
CancellationToken cancellationToken ) =>
33
30
{
34
31
var model = await service . GetAsync ( user . GetUserId ( ) , id , cancellationToken ) ;
35
-
36
- if ( model is null )
37
- {
38
- return new NotFoundResult ( ) ;
39
- }
40
-
41
- return new JsonResult ( model ) as IResult ;
32
+ return model is null ? Results . NotFound ( ) : Results . Json ( model ) ;
42
33
} ) . RequireAuthorization ( ) ;
43
34
44
35
// Create a new Todo item
@@ -50,12 +41,12 @@ public static IEndpointRouteBuilder MapApiRoutes(this IEndpointRouteBuilder buil
50
41
{
51
42
if ( model is null || string . IsNullOrWhiteSpace ( model . Text ) )
52
43
{
53
- return new BadRequestResult ( ) ;
44
+ return Results . BadRequest ( ) ;
54
45
}
55
46
56
47
var id = await service . AddItemAsync ( user . GetUserId ( ) , model . Text , cancellationToken ) ;
57
48
58
- return new CreatedAtResult ( $ "/api/items/{ id } ", new { id } ) as IResult ;
49
+ return Results . Created ( $ "/api/items/{ id } ", new { id } ) ;
59
50
} ) . RequireAuthorization ( ) ;
60
51
61
52
// Mark a Todo item as completed
@@ -67,14 +58,12 @@ public static IEndpointRouteBuilder MapApiRoutes(this IEndpointRouteBuilder buil
67
58
{
68
59
var wasCompleted = await service . CompleteItemAsync ( user . GetUserId ( ) , id , cancellationToken ) ;
69
60
70
- var statusCode = wasCompleted switch
61
+ return wasCompleted switch
71
62
{
72
- true => StatusCodes . Status204NoContent ,
73
- false => StatusCodes . Status400BadRequest ,
74
- _ => StatusCodes . Status404NotFound ,
63
+ true => Results . NoContent ( ) ,
64
+ false => Results . BadRequest ( ) ,
65
+ _ => Results . NotFound ( ) ,
75
66
} ;
76
-
77
- return new StatusCodeResult ( statusCode ) ;
78
67
} ) . RequireAuthorization ( ) ;
79
68
80
69
// Delete a Todo item
@@ -85,36 +74,10 @@ public static IEndpointRouteBuilder MapApiRoutes(this IEndpointRouteBuilder buil
85
74
CancellationToken cancellationToken ) =>
86
75
{
87
76
var wasDeleted = await service . DeleteItemAsync ( user . GetUserId ( ) , id , cancellationToken ) ;
88
-
89
- return new StatusCodeResult ( wasDeleted ? StatusCodes . Status204NoContent : StatusCodes . Status404NotFound ) ;
77
+ return wasDeleted ? Results . NoContent ( ) : Results . NotFound ( ) ;
90
78
} ) . RequireAuthorization ( ) ;
91
79
92
80
return builder ;
93
81
}
94
-
95
- // HACK Custom result types until CreatedAtResult/ObjectResult implements IResult.
96
- // See https://github.com/dotnet/aspnetcore/issues/32565.
97
-
98
- private sealed class CreatedAtResult : IResult
99
- {
100
- private readonly string _location ;
101
- private readonly object ? _value ;
102
-
103
- internal CreatedAtResult ( string location , object ? value )
104
- {
105
- _location = location ;
106
- _value = value ;
107
- }
108
-
109
- public async Task ExecuteAsync ( HttpContext httpContext )
110
- {
111
- var response = httpContext . Response ;
112
-
113
- response . Headers . Location = _location ;
114
- response . StatusCode = StatusCodes . Status201Created ;
115
-
116
- await response . WriteAsJsonAsync ( _value , httpContext . RequestAborted ) ;
117
- }
118
- }
119
82
}
120
83
}
0 commit comments