Der OData-Controller gibt unterschiedliche Fehler für lokale und unterschiedliche für Remote-Computer zurück


Martin Slezák

In meinem Projekt verwende ich OData 3.0 und muss Fehler behandeln, die von gespeicherten SQL-Prozeduren herrühren. Hier ist der Controller-Code:

public class StartProductionBatchListController : ODataController {
    private SitContext<StartProductionBatchModel> db = new SitContext<StartProductionBatchModel>();

    [EnableQuery]
    [SITAuthorize("/production/ordersOverview")]
    public DbRawSqlQuery<StartProductionBatchModel> GetStartProductionBatchList([FromODataUri] string entryId)
    {
        Dictionary<string, string> parameters = new Dictionary<string, string>();

        parameters.Add("ENTRY_ID", entryId);

        return db.ExecuteProcedure("StartProductionBatch", parameters);
    }
}

Bei einem Fehler in der gespeicherten Prozedur wird die Ausnahme mit dem SQL-Befehl RAISERROR ausgelöst.

Auf meiner Client-Seite erhalte ich zwei unterschiedliche Antworten. Wenn ich eine Verbindung von localhost herstelle, erhalte ich Folgendes:

{
  "odata.error":{
    "code":"","message":{
      "lang":"en-US","value":"An error has occurred."
    },"innererror":{
      "message":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","type":"System.InvalidOperationException","stacktrace":"","internalexception":{

        "message":"The following materials are not available on the line: 562942",

"type":"System.Data.SqlClient.SqlException","stacktrace":"

    ... there is the entire stack here

      }
    }
  }
}

... wo ich die Fehlermeldung lesen kann (Die folgenden Materialien sind in der Zeile nicht verfügbar: 562942)

Wenn ich dasselbe vom Remotecomputer aus mache, bekomme ich Folgendes zurück:

{
  "odata.error":{
    "code":"","message":{
      "lang":"en-US","value":"An error has occurred."
    }
  }
}

Ich habe versucht, meinen IIS so <httpErrors errorMode="Detailed" />einzurichten , dass der detaillierte Fehler (Einstellung in web.config) zurückgegeben wird, obwohl es sich möglicherweise um ein Sicherheitsrisiko handelt (in diesem Fall handelt es sich nicht wirklich um eine Intranetanwendung, die nicht im Internet veröffentlicht wurde), aber nichts hat geholfen.

Vielen Dank für jede Hilfe.

TomDoesCode

Sie müssen die IncludeErrorDetailPolicyEigenschaft für die HttpConfigurationKlasse wie folgt festlegen :

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

Weitere Details finden Sie hier: https://msdn.microsoft.com/en-us/library/system.web.http.httpconfiguration.includeerrordetailpolicy(v=vs.108).aspx

Verwandte Artikel