ich den Auftrag erhalten haben, unsere C# machen WebAPI immer Fehlerreaktionen mit folgendem Format zurück:httperror ignoriert, wenn eine Fehlermeldung in einem benutzerdefinierten Erstellen von ExceptionFilterAttribute (wenn die Ausnahme in einem anderen Attribut throwed wird)
{
"error": {
"code": 15,
"message": "My custom error message"
}
}
davon, weil ich meine eigenen ExceptionFilterAttribute registriert:
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
class CustomError
{
public int code { get; set; }
public String message { get; set; }
}
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is BaseException)
{
BaseException exception = (BaseException)context.Exception;
HttpError error = new HttpError();
CustomError customError = new CustomError
{
code=exception.CustomError.code,
message=exception.CustomError.message
};
error.Add("error", customError);
context.Response = context.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error);
}
else
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
Dies funktioniert sehr gut, wenn die Ausnahme in einem Controller throwed wurde. Aber wenn die Ausnahme wurde in einem Attribut (AuthorizeAttribute oder EnableQueryAttribute) throwed, althoug meine Gewohnheit ExceptionFilter genannt wird und der gleiche Code ausgeführt wird, erzeugt die Reaktion der gegebene ignoriert httperror und die Antwort hat den folgenden Aufbau:
{
"error": {
"code": "",
"message": ""
}
}
Ich bin nicht sehr geschickt in C#, ich bin mir ziemlich sicher, dass ich etwas falsch mache, aber ich weiß nicht was: S
Vielen Dank im Voraus.
Edit 1:
ich die Anwendung des Attribut, das die Ausnahme bei jeder Methode gibt, wo das Attribut benötigt wird. Zum Beispiel habe ich einen OData-Controller für eine Entität namens „Ereignis“:
[CustomAuthentication]
[CustomEnableQueryAttribute(PageSize = 20)]
public IQueryable<Event> Get()
{
(...)
return result;
}
Wie gesagt, wenn die Ausnahme im Körper des Reglers throwed, dann wird mein CustomExceptionFilter aufgerufen, und die individuelle Reaktion korrekt erstellt .
Aber wenn die Ausnahme im CustomAuthenticationAttribute oder im CustomEnableQueryAttribute ausgelöst wird, obwohl mein CustomExceptionFilter aufgerufen wird und der gleiche Code ausgeführt wird, ist die Body-Antwort falsch (siehe Beispiel).
wo Sie diese artribute auf Methodenebene angewendet haben ?? –
Hallo, ich habe die Hauptnachricht mit mehr Informationen auf Ihre Frage –
bearbeitet, überprüfen Sie meine Antwort und lassen Sie mich wissen, wenn Sie Hilfe benötigen –