@@ -10,76 +10,170 @@ namespace Microsoft.AspNetCore.WebUtilities;
1010public  static   class  ReasonPhrases 
1111{ 
1212    // Status Codes listed at http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml 
13-     private  static   readonly  Dictionary < int ,  string >  Phrases  =  new ( ) 
14-     { 
15-         {  100 ,  "Continue"  } , 
16-         {  101 ,  "Switching Protocols"  } , 
17-         {  102 ,  "Processing"  } , 
18- 
19-         {  200 ,  "OK"  } , 
20-         {  201 ,  "Created"  } , 
21-         {  202 ,  "Accepted"  } , 
22-         {  203 ,  "Non-Authoritative Information"  } , 
23-         {  204 ,  "No Content"  } , 
24-         {  205 ,  "Reset Content"  } , 
25-         {  206 ,  "Partial Content"  } , 
26-         {  207 ,  "Multi-Status"  } , 
27-         {  208 ,  "Already Reported"  } , 
28-         {  226 ,  "IM Used"  } , 
29- 
30-         {  300 ,  "Multiple Choices"  } , 
31-         {  301 ,  "Moved Permanently"  } , 
32-         {  302 ,  "Found"  } , 
33-         {  303 ,  "See Other"  } , 
34-         {  304 ,  "Not Modified"  } , 
35-         {  305 ,  "Use Proxy"  } , 
36-         {  306 ,  "Switch Proxy"  } , 
37-         {  307 ,  "Temporary Redirect"  } , 
38-         {  308 ,  "Permanent Redirect"  } , 
39- 
40-         {  400 ,  "Bad Request"  } , 
41-         {  401 ,  "Unauthorized"  } , 
42-         {  402 ,  "Payment Required"  } , 
43-         {  403 ,  "Forbidden"  } , 
44-         {  404 ,  "Not Found"  } , 
45-         {  405 ,  "Method Not Allowed"  } , 
46-         {  406 ,  "Not Acceptable"  } , 
47-         {  407 ,  "Proxy Authentication Required"  } , 
48-         {  408 ,  "Request Timeout"  } , 
49-         {  409 ,  "Conflict"  } , 
50-         {  410 ,  "Gone"  } , 
51-         {  411 ,  "Length Required"  } , 
52-         {  412 ,  "Precondition Failed"  } , 
53-         {  413 ,  "Payload Too Large"  } , 
54-         {  414 ,  "URI Too Long"  } , 
55-         {  415 ,  "Unsupported Media Type"  } , 
56-         {  416 ,  "Range Not Satisfiable"  } , 
57-         {  417 ,  "Expectation Failed"  } , 
58-         {  418 ,  "I'm a teapot"  } , 
59-         {  419 ,  "Authentication Timeout"  } , 
60-         {  421 ,  "Misdirected Request"  } , 
61-         {  422 ,  "Unprocessable Entity"  } , 
62-         {  423 ,  "Locked"  } , 
63-         {  424 ,  "Failed Dependency"  } , 
64-         {  426 ,  "Upgrade Required"  } , 
65-         {  428 ,  "Precondition Required"  } , 
66-         {  429 ,  "Too Many Requests"  } , 
67-         {  431 ,  "Request Header Fields Too Large"  } , 
68-         {  451 ,  "Unavailable For Legal Reasons"  } , 
69-         {  499 ,  "Client Closed Request"  } , 
70- 
71-         {  500 ,  "Internal Server Error"  } , 
72-         {  501 ,  "Not Implemented"  } , 
73-         {  502 ,  "Bad Gateway"  } , 
74-         {  503 ,  "Service Unavailable"  } , 
75-         {  504 ,  "Gateway Timeout"  } , 
76-         {  505 ,  "HTTP Version Not Supported"  } , 
77-         {  506 ,  "Variant Also Negotiates"  } , 
78-         {  507 ,  "Insufficient Storage"  } , 
79-         {  508 ,  "Loop Detected"  } , 
80-         {  510 ,  "Not Extended"  } , 
81-         {  511 ,  "Network Authentication Required"  } , 
82-     } ; 
13+     private  static   readonly  string [ ] [ ]  HttpReasonPhrases  =  [ 
14+         [ ] , 
15+         [ 
16+             /* 100 */  "Continue" , 
17+             /* 101 */  "Switching Protocols" , 
18+             /* 102 */  "Processing" 
19+         ] , 
20+         [ 
21+             /* 200 */  "OK" , 
22+             /* 201 */  "Created" , 
23+             /* 202 */  "Accepted" , 
24+             /* 203 */  "Non-Authoritative Information" , 
25+             /* 204 */  "No Content" , 
26+             /* 205 */  "Reset Content" , 
27+             /* 206 */  "Partial Content" , 
28+             /* 207 */  "Multi-Status" , 
29+             /* 208 */  "Already Reported" , 
30+             /* 209 */  string . Empty , 
31+             /* 210 */  string . Empty , 
32+             /* 211 */  string . Empty , 
33+             /* 212 */  string . Empty , 
34+             /* 213 */  string . Empty , 
35+             /* 214 */  string . Empty , 
36+             /* 215 */  string . Empty , 
37+             /* 216 */  string . Empty , 
38+             /* 217 */  string . Empty , 
39+             /* 218 */  string . Empty , 
40+             /* 219 */  string . Empty , 
41+             /* 220 */  string . Empty , 
42+             /* 221 */  string . Empty , 
43+             /* 222 */  string . Empty , 
44+             /* 223 */  string . Empty , 
45+             /* 224 */  string . Empty , 
46+             /* 225 */  string . Empty , 
47+             /* 226 */  "IM Used" 
48+         ] , 
49+         [ 
50+             /* 300 */  "Multiple Choices" , 
51+             /* 301 */  "Moved Permanently" , 
52+             /* 302 */  "Found" , 
53+             /* 303 */  "See Other" , 
54+             /* 304 */  "Not Modified" , 
55+             /* 305 */  "Use Proxy" , 
56+             /* 306 */  "Switch Proxy" , 
57+             /* 307 */  "Temporary Redirect" , 
58+             /* 308 */  "Permanent Redirect" 
59+         ] , 
60+         [ 
61+             /* 400 */  "Bad Request" , 
62+             /* 401 */  "Unauthorized" , 
63+             /* 402 */  "Payment Required" , 
64+             /* 403 */  "Forbidden" , 
65+             /* 404 */  "Not Found" , 
66+             /* 405 */  "Method Not Allowed" , 
67+             /* 406 */  "Not Acceptable" , 
68+             /* 407 */  "Proxy Authentication Required" , 
69+             /* 408 */  "Request Timeout" , 
70+             /* 409 */  "Conflict" , 
71+             /* 410 */  "Gone" , 
72+             /* 411 */  "Length Required" , 
73+             /* 412 */  "Precondition Failed" , 
74+             /* 413 */  "Payload Too Large" , 
75+             /* 414 */  "URI Too Long" , 
76+             /* 415 */  "Unsupported Media Type" , 
77+             /* 416 */  "Range Not Satisfiable" , 
78+             /* 417 */  "Expectation Failed" , 
79+             /* 418 */  "I'm a teapot" , 
80+             /* 419 */  "Authentication Timeout" , 
81+             /* 420 */  string . Empty , 
82+             /* 421 */  "Misdirected Request" , 
83+             /* 422 */  "Unprocessable Entity" , 
84+             /* 423 */  "Locked" , 
85+             /* 424 */  "Failed Dependency" , 
86+             /* 425 */  string . Empty , 
87+             /* 426 */  "Upgrade Required" , 
88+             /* 427 */  string . Empty , 
89+             /* 428 */  "Precondition Required" , 
90+             /* 429 */  "Too Many Requests" , 
91+             /* 430 */  string . Empty , 
92+             /* 431 */  "Request Header Fields Too Large" , 
93+             /* 432 */  string . Empty , 
94+             /* 433 */  string . Empty , 
95+             /* 434 */  string . Empty , 
96+             /* 435 */  string . Empty , 
97+             /* 436 */  string . Empty , 
98+             /* 437 */  string . Empty , 
99+             /* 438 */  string . Empty , 
100+             /* 439 */  string . Empty , 
101+             /* 440 */  string . Empty , 
102+             /* 441 */  string . Empty , 
103+             /* 442 */  string . Empty , 
104+             /* 443 */  string . Empty , 
105+             /* 444 */  string . Empty , 
106+             /* 445 */  string . Empty , 
107+             /* 446 */  string . Empty , 
108+             /* 447 */  string . Empty , 
109+             /* 448 */  string . Empty , 
110+             /* 449 */  string . Empty , 
111+             /* 450 */  string . Empty , 
112+             /* 451 */  "Unavailable For Legal Reasons" , 
113+             /* 452 */  string . Empty , 
114+             /* 453 */  string . Empty , 
115+             /* 454 */  string . Empty , 
116+             /* 455 */  string . Empty , 
117+             /* 456 */  string . Empty , 
118+             /* 457 */  string . Empty , 
119+             /* 458 */  string . Empty , 
120+             /* 459 */  string . Empty , 
121+             /* 460 */  string . Empty , 
122+             /* 461 */  string . Empty , 
123+             /* 462 */  string . Empty , 
124+             /* 463 */  string . Empty , 
125+             /* 464 */  string . Empty , 
126+             /* 465 */  string . Empty , 
127+             /* 466 */  string . Empty , 
128+             /* 467 */  string . Empty , 
129+             /* 468 */  string . Empty , 
130+             /* 469 */  string . Empty , 
131+             /* 470 */  string . Empty , 
132+             /* 471 */  string . Empty , 
133+             /* 472 */  string . Empty , 
134+             /* 473 */  string . Empty , 
135+             /* 474 */  string . Empty , 
136+             /* 475 */  string . Empty , 
137+             /* 476 */  string . Empty , 
138+             /* 477 */  string . Empty , 
139+             /* 478 */  string . Empty , 
140+             /* 479 */  string . Empty , 
141+             /* 480 */  string . Empty , 
142+             /* 481 */  string . Empty , 
143+             /* 482 */  string . Empty , 
144+             /* 483 */  string . Empty , 
145+             /* 484 */  string . Empty , 
146+             /* 485 */  string . Empty , 
147+             /* 486 */  string . Empty , 
148+             /* 487 */  string . Empty , 
149+             /* 488 */  string . Empty , 
150+             /* 489 */  string . Empty , 
151+             /* 490 */  string . Empty , 
152+             /* 491 */  string . Empty , 
153+             /* 492 */  string . Empty , 
154+             /* 493 */  string . Empty , 
155+             /* 494 */  string . Empty , 
156+             /* 495 */  string . Empty , 
157+             /* 496 */  string . Empty , 
158+             /* 497 */  string . Empty , 
159+             /* 498 */  string . Empty , 
160+             /* 499 */  "Client Closed Request" 
161+         ] , 
162+         [ 
163+             /* 500 */  "Internal Server Error" , 
164+             /* 501 */  "Not Implemented" , 
165+             /* 502 */  "Bad Gateway" , 
166+             /* 503 */  "Service Unavailable" , 
167+             /* 504 */  "Gateway Timeout" , 
168+             /* 505 */  "HTTP Version Not Supported" , 
169+             /* 506 */  "Variant Also Negotiates" , 
170+             /* 507 */  "Insufficient Storage" , 
171+             /* 508 */  "Loop Detected" , 
172+             /* 509 */  string . Empty , 
173+             /* 510 */  "Not Extended" , 
174+             /* 511 */  "Network Authentication Required" 
175+         ] 
176+     ] ; 
83177
84178    /// <summary> 
85179    /// Gets the reason phrase for the specified status code. 
@@ -88,6 +182,15 @@ public static class ReasonPhrases
88182    /// <returns>The reason phrase, or <see cref="string.Empty"/> if the status code is unknown.</returns> 
89183    public  static   string  GetReasonPhrase ( int  statusCode ) 
90184    { 
91-         return  Phrases . TryGetValue ( statusCode ,  out  var  phrase )  ?  phrase  :  string . Empty ; 
185+         if  ( ( uint ) ( statusCode  -  100 )  <  500 ) 
186+         { 
187+             var  ( i ,  j )  =  Math . DivRem ( ( uint ) statusCode ,  100 ) ; 
188+             string [ ]  phrases  =  HttpReasonPhrases [ i ] ; 
189+             if  ( j  <  ( uint ) phrases . Length ) 
190+             { 
191+                 return  phrases [ j ] ; 
192+             } 
193+         } 
194+         return  string . Empty ; 
92195    } 
93196} 
0 commit comments