SimpleREST.NET
0.1
A simple and minimal api framework for .net base on Express.js
Loading...
Searching...
No Matches
SimpleRestResponse.cs
Go to the documentation of this file.
1
using
System.Net;
2
using
System.Text;
3
using
System.Text.Json;
4
using
Dumpify;
5
using
Newtonsoft.Json;
6
using
SimpleRest.Views
;
7
using
Spectre.Console;
8
9
namespace
SimpleRest.Api
;
10
11
public
class
SimpleRestResponse
:
ISimpleRestHttpObject
12
{
13
public
delegate
void
Result
(
string
result =
""
);
14
public
HttpListenerResponse
Response
{
get
;
private
set
; }
15
ISimpleRestContentTypeParser
m_TypeParser;
16
public
string
?
ContentType
{
get
;
private
set
; }
17
public
event
Result
?
OnSend
;
18
public
bool
HasCompleted
{
get
;
private
set
; }
19
StatusCode
m_StatusCode =
StatusCode
.
Success
;
20
JsonSerializerOptions m_SerializerOptions;
21
public
StatusCode
StatusCode
22
{
23
get
=> m_StatusCode;
24
set
25
{
26
if
(value.Code.ToString().Length == 3)
27
{
28
m_StatusCode = value;
29
}
30
}
31
}
32
33
public
SimpleRestBody
Body
{
get
;
private
set
; }
34
35
public
WebHeaderCollection
Headers
{
get
;
set
; } =
new
WebHeaderCollection();
36
37
public
long
ContentLength
{
get
;
private
set
; }
38
39
public
string
?
UserAgent
{
get
;
private
set
; }
40
41
public
SimpleRestResponse
(HttpListenerResponse response,
ISimpleRestContentTypeParser
parser, JsonSerializerOptions jsonSerializerOptions)
42
{
43
Response
= response;
44
m_TypeParser = parser;
45
Body
=
new
SimpleRestBody
(
""
, jsonSerializerOptions);
46
m_SerializerOptions = jsonSerializerOptions;
47
}
48
49
public
void
Return
()
50
{
51
52
53
ContentLength
= 0;
54
ContentType
=
null
;
55
StatusCode
=
new
StatusCode
(204,
"No Resource"
);
56
SetHeaders();
57
WriteResponse();
58
}
59
60
public
void
Send<T>
(T result)
61
{
62
63
Response.StatusCode =
StatusCode
.
InternalServerError
.
Code
;
64
65
string
finalOutput = JsonConvert.SerializeObject(result);
66
ContentType
= m_TypeParser.GetType<T>();
67
Body
=
new
SimpleRestBody
(finalOutput, m_SerializerOptions);
68
SetHeaders();
69
WriteResponse();
70
}
71
72
public
void
View
(
string
content,
string
contentType =
"text/html; charset=utf-8"
)
73
{
74
ContentType
= contentType;
75
Body
=
new
SimpleRestBody
(content, m_SerializerOptions);
76
SetHeaders();
77
WriteResponse();
78
}
79
80
public
void
View
(
ISimpleRestView
view,
string
contentType =
"text/html; charset=urf-8"
)
81
{
82
ContentType
= contentType;
83
Body
=
new
SimpleRestBody
(view.
GetView
(), m_SerializerOptions);
84
SetHeaders();
85
WriteResponse();
86
}
87
88
public
void
Redirect
(
string
location,
RedirectCode
? redirectCode =
null
)
89
{
90
redirectCode = redirectCode ??
RedirectCode
.
TemporaryRedirect
;
91
Response.StatusCode = redirectCode.
Code
;
92
Response.StatusDescription = redirectCode.Name;
93
Body
=
new
SimpleRestBody
(redirectCode.ToString(), m_SerializerOptions);
94
SetHeaders();
95
Response
.Headers[
"Location"
] = location;
96
97
}
98
99
void
SetHeaders()
100
{
101
ContentLength
=
Body
.
Bytes
.Length;
102
Response.Headers =
Headers
;
103
Response.ContentType =
ContentType
;
104
Response.ContentLength64 =
ContentLength
;
105
Response.StatusCode =
StatusCode
.
Code
;
106
}
107
108
void
WriteResponse()
109
{
110
111
byte
[] buffer =
Body
.
Bytes
;
112
Response
.OutputStream.Write(buffer, 0, buffer.Length);
113
114
Response
.Close();
115
HasCompleted
=
true
;
116
// OnSend?.Invoke(Body.Content);
117
118
}
119
120
public
void
Error
(
StatusCode
? statusCode =
null
)
121
{
122
statusCode ??= m_StatusCode;
123
m_StatusCode = statusCode;
124
Body
=
new
SimpleRestBody
(m_StatusCode.
Message
, m_SerializerOptions);
125
SetHeaders();
126
WriteResponse();
127
}
128
}
SimpleRest.Api.RedirectCode
Definition
RedirectCode.cs:7
SimpleRest.Api.RedirectCode.TemporaryRedirect
static RedirectCode TemporaryRedirect
Definition
RedirectCode.cs:44
SimpleRest.Api.SimpleRestBody
The body of a SimpleRest.Api.SimpleRestRequest. This class encapsulates the content of an HTTP reques...
Definition
SimpleRestRequest.cs:129
SimpleRest.Api.SimpleRestBody.Bytes
byte[] Bytes
Gets the raw content of the request body as a byte array.
Definition
SimpleRestRequest.cs:162
SimpleRest.Api.SimpleRestResponse
Definition
SimpleRestResponse.cs:12
SimpleRest.Api.SimpleRestResponse.SimpleRestResponse
SimpleRestResponse(HttpListenerResponse response, ISimpleRestContentTypeParser parser, JsonSerializerOptions jsonSerializerOptions)
Definition
SimpleRestResponse.cs:41
SimpleRest.Api.SimpleRestResponse.StatusCode
StatusCode StatusCode
Definition
SimpleRestResponse.cs:22
SimpleRest.Api.SimpleRestResponse.Error
void Error(StatusCode? statusCode=null)
Definition
SimpleRestResponse.cs:120
SimpleRest.Api.SimpleRestResponse.ContentLength
long ContentLength
Definition
SimpleRestResponse.cs:37
SimpleRest.Api.SimpleRestResponse.UserAgent
string? UserAgent
Definition
SimpleRestResponse.cs:39
SimpleRest.Api.SimpleRestResponse.ContentType
string? ContentType
Definition
SimpleRestResponse.cs:16
SimpleRest.Api.SimpleRestResponse.Return
void Return()
Definition
SimpleRestResponse.cs:49
SimpleRest.Api.SimpleRestResponse.Redirect
void Redirect(string location, RedirectCode? redirectCode=null)
Definition
SimpleRestResponse.cs:88
SimpleRest.Api.SimpleRestResponse.OnSend
Result? OnSend
Definition
SimpleRestResponse.cs:17
SimpleRest.Api.SimpleRestResponse.Response
HttpListenerResponse Response
Definition
SimpleRestResponse.cs:14
SimpleRest.Api.SimpleRestResponse.Result
delegate void Result(string result="")
SimpleRest.Api.SimpleRestResponse.Send< T >
void Send< T >(T result)
Definition
SimpleRestResponse.cs:60
SimpleRest.Api.SimpleRestResponse.View
void View(ISimpleRestView view, string contentType="text/html; charset=urf-8")
Definition
SimpleRestResponse.cs:80
SimpleRest.Api.SimpleRestResponse.View
void View(string content, string contentType="text/html; charset=utf-8")
Definition
SimpleRestResponse.cs:72
SimpleRest.Api.SimpleRestResponse.HasCompleted
bool HasCompleted
Definition
SimpleRestResponse.cs:18
SimpleRest.Api.SimpleRestResponse.Body
SimpleRestBody Body
Definition
SimpleRestResponse.cs:33
SimpleRest.Api.SimpleRestResponse.Headers
WebHeaderCollection Headers
Definition
SimpleRestResponse.cs:35
SimpleRest.Api.StatusCode
Definition
StatusCode.cs:6
SimpleRest.Api.StatusCode.InternalServerError
static readonly StatusCode InternalServerError
Definition
StatusCode.cs:44
SimpleRest.Api.StatusCode.Success
static readonly StatusCode Success
Definition
StatusCode.cs:20
SimpleRest.Api.StatusCode.Message
string Message
Definition
StatusCode.cs:9
SimpleRest.Api.StatusCode.Code
int Code
Definition
StatusCode.cs:7
SimpleRest.Api.ISimpleRestContentTypeParser
Definition
ISimpleRestContentTypeParser.cs:3
SimpleRest.Api.ISimpleRestHttpObject
Definition
ISimpleRestHttpObject.cs:7
SimpleRest.Views.ISimpleRestView
Definition
ISimpleRestView.cs:3
SimpleRest.Views.ISimpleRestView.GetView
string GetView()
SimpleRest.Api
Definition
Enums.cs:1
SimpleRest.Views
Definition
ResourceNotFoundView.cs:3
Src
Api
SimpleRestResponse.cs
Generated by
1.12.0