Unfortunately, when switching from MVC to API, Asp.Net Core no longer has a response.statusText when a controller responds to an error.
Apparently, this has been deactivated.
In Asp Core API . Net5 cannot be turned off suppression in the Startup.cs services.
Asp.Net Core Web API
Status Code –
123 (Response:StatusCode)
return StatusCode(401,"You are not the Owner"); |
Response in React Client
Unfortunately without status text
status 401 statusText '' |
Name |
Value |
Type |
|
◢ |
response |
Response {type: 'basic', url: 'https://localhost:44315/api/articles/33', redirected: false, status: 401, ok: false, …} |
object |
▶ get body |
ƒ body() |
function |
|
bodyUsed |
false |
boolean |
|
▶ headers |
Headers |
object |
|
ok |
false |
boolean |
|
redirected |
false |
boolean |
|
status |
401 |
number |
|
statusText |
'' |
string |
|
type |
'basic' |
string |
|
url |
string |
Status Code – 400 (Bad Request)
return BadRequest("Statustext of Bad Request 400"); |
Unfortunately also without StatusText in the React Client
Name |
Value |
Type |
|
◢ |
response |
Response {type: 'basic', url: 'https://localhost:44315/api/articles/0', redirected: false, status: 200, ok: true, …} |
object |
▶ get body |
ƒ body() |
function |
|
bodyUsed |
false |
boolean |
|
▶ headers |
Headers |
object |
|
ok |
true |
boolean |
|
redirected |
false |
boolean |
|
status |
200 |
number |
|
statusText |
'' |
string |
|
type |
'basic' |
string |
|
url |
string |
I tried the following code versions
if (IDOwner != sIDUser) { return BadRequest("everything wrong"); //StatusCode(StatusCodes.Status403Forbidden,"nothing in asp"); //StatusCode(StatusCodes.Status403Forbidden, new ApiError() { ErrorMessage = "this is in the statusText" }); //StatusCode(StatusCodes.Status406NotAcceptable,"User is not the Owner"); //return BadRequest(new ApiError(){ErrorMessage = "this is in the statusText" }); //JsonResult myResponse = new JsonResult("StatusCode"); //return myResponse ; //return BadRequest(sResult); ///return new BadRequestObjectResult("StatusText for BadRequest"); //return BadRequest("StatusText for BadRequest"); } //</ check Owner > } |
According to a guide from MVC, suppression can be disabled in the Startup.cs, but this has not been successful either
services.AddMvc() .ConfigureApiBehaviorOptions(options => { options.SuppressMapClientErrors = false; // <-- THIS SHOULD BE FALSE //options.InvalidModelStateResponseFactory = context => //{ // var result = new BadRequestObjectResult(context.ModelState);
// // TODO: add `using System.Net.Mime;` to resolve MediaTypeNames // result.ContentTypes.Add(MediaTypeNames.Application.Json); // result.ContentTypes.Add(MediaTypeNames.Application.Xml);
// return result; //}; }); |
Return StatusCodes in Asp.Net Core API
Displayed Status Code in React when using return StatusCode(..) in Asp.Net Core API
And can then respond according to the Response.Status code in the client
}; const response = await fetch('api/articles/' + this.state.idarticle, requestOptions); //*SEND DATA if (response.status !== 0) { if (response.status === 400) alert("Bad Data Request"); else if (response.status === 403) alert("User is not Owner"); else alert('send error:' + response.statusText); } |
Return Values for StatusCodes
Status |
|
100 |
Continue |
Status |
|
412 |
PreconditionFailed |
Status |
|
413 |
PayloadTooLarge |
Status |
|
413 |
RequestEntityTooLarge |
Status |
|
414 |
RequestUriTooLong |
Status |
|
414 |
UriTooLong |
Status |
|
415 |
UnsupportedMediaType |
Status |
|
416 |
RangeNotSatisfiable |
Status |
|
416 |
RequestedRangeNotSatisfiable |
Status |
|
417 |
ExpectationFailed |
Status |
|
418 |
ImATeapot |
Status |
|
419 |
AuthenticationTimeout |
Status |
|
421 |
MisdirectedRequest |
Status |
|
422 |
UnprocessableEntity |
Status |
|
423 |
Locked |
Status |
|
424 |
FailedDependency |
Status |
|
426 |
UpgradeRequired |
Status |
|
428 |
PreconditionRequired |
Status |
|
429 |
TooManyRequests |
Status |
|
431 |
RequestHeaderFieldsTooLarge |
Status |
|
451 |
UnavailableForLegalReasons |
Status |
|
500 |
InternalServerError |
Status |
|
501 |
NotImplemented |
Status |
|
502 |
BadGateway |
Status |
|
503 |
ServiceUnavailable |
Status |
|
504 |
GatewayTimeout |
Status |
|
505 |
HttpVersionNotsupported |
Status |
|
506 |
VariantAlsoNegotiates |
Status |
|
507 |
InsufficientStorage |
Status |
|
508 |
LoopDetected |
Status |
|
411 |
LengthRequired |
Status |
|
510 |
NotExtended |
Status |
|
410 |
Gone |
Status |
|
408 |
RequestTimeout |
Status |
|
101 |
SwitchingProtocols |
Status |
|
102 |
Processing |
Status |
|
200 |
OK |
Status |
|
201 |
Created |
Status |
|
202 |
Accepted |
Status |
|
203 |
NonAuthoritative |
Status |
|
204 |
NoContent |
Status |
|
205 |
ResetContent |
Status |
|
206 |
PartialContent |
Status |
|
207 |
MultiStatus |
Status |
|
208 |
AlreadyReported |
Status |
|
226 |
IMUsed |
Status |
|
300 |
MultipleChoices |
Status |
|
301 |
MovedPermanently |
Status |
|
302 |
Found |
Status |
|
303 |
SeeOther |
Status |
|
304 |
NotModified |
Status |
|
305 |
UseProxy |
Status |
|
306 |
SwitchProxy |
Status |
|
307 |
TemporaryRedirect |
Status |
|
308 |
PermanentRedirect |
Status |
|
400 |
BadRequest |
Status |
|
401 |
Unauthorized |
Status |
|
402 |
PaymentRequired |
Status |
|
403 |
Forbidden |
Status |
|
404 |
NotFound |
Status |
|
405 |
MethodNotAllowed |
Status |
|
406 |
NotAcceptable |
Status |
|
407 |
ProxyAuthenticationRequired |
Status |
|
409 |
Conflict |
Status |
|
511 |
NetworkAuthenticationRequired |