Leider ist in Asp.Net Core beim Wechsel von MVC auf API bei den Antworten eines Controllers im Fehlerfall kein response.statusText mehr vorhanden.
Scheinbar wurde dieser deaktiviert.
In Asp Core API .Net5 kann auch in der Startup.cs bei Services die Unterdrückung nicht ausgeschaltet werden.
Asp.Net Core Web API
Status Code –
123 (Response:StatusCode)
return StatusCode(401,"You are not the Owner"); |
Response in React Client
Leider ohne Statustext
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"); |
Leider auch ohne StatusText im 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 |
Folgende Code Versionen habe ich ausprobiert
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 > } |
Laut einer Anleitung aus MVC kann man die Unterdrückung in der Startup.cs deaktivieren, aber das hat auch zu keinem Erfolg geführt
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
Angezeigter Status Code in React bei verwendung von return StatusCode(..) in Asp.Net Core API
Und kann dann entsprechend des Response.Status Codes im Client reagieren
}; 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 |