2016-08-12 1 views
8

Ich verwende WebApiContrib.Formatting.Jsonp innerhalb eines Web-API-2-Dienstes plus Swagger für API-Dokumentation und Tests.Behandlung ungültiger JSONP-Anforderungen in der Web-API

Wenn ich jede JSONP Methode durch Swagger auslösen, mein Dienst stürzt in Datei JsonpMediaTypeFormatter.cs auf der folgenden Zeile:

throw new InvalidOperationException(Properties.Resources.NoCallback); 
// NoCallback = The name 'NoCallback' does not exist in the current context 

Für eine Sache, verstehe ich nicht, warum Swagger nicht erlaubt, einen Rückruf Namen für JSONP-Anfragen. Aber noch wichtiger, ich möchte nicht, dass der Dienst deswegen abstürzt.

Fragen:

  • Wie können wir solche Fehler auf der Serviceseite umgehen?
  • Gibt es eine Möglichkeit Swagger JSONP-Anfragen richtig zu senden? (Wie vorab definiert, einen Rückruf Name für alle JSONP Anfragen?)
+1

Fiddler http://www.telerik.com/ Fiddler oder etwas Ähnliches, um sicherzustellen, dass Ihre jsonp-Anfragen wohlgeformt sind. Gibt es einen Grund für Sie, JSONP und nicht einfach JSON als CORS zu verwenden? – Stack

+0

Telerik-Produkte für .NET sind alle kommerziellen, ich kann es nicht aus diesem Grund verwenden, und ich vermute, es wäre ein Overkill für die Art der Frage, die ich stelle. Und ich brauche JSONP, um Anfragen unter vielen Servern zu bearbeiten, also ist CORS der einzige Grund, warum ich es benutze. –

+2

Es ist nur ein kostenloser Debug-Proxy. Es ist eine kostenlose eigenständige Desktop-Anwendung, die nichts mit .NET zu tun hat. Alles, was es tut, ist Ihre HTTP-Anfragen/Antworten für das Debuggen zu erfassen. Sie können etwas wie https://www.getpostman.com/ ausprobieren, das hübsch ist, aber nicht so flexibel wie Fiddler. – Stack

Antwort

1
PM> Install-Package Newtonsoft.Json.Schema 

Oder Sie können Sie die Quelle laden bei https://github.com/JamesNK/Newtonsoft.Json.Schema/releases

JSchema schema = JSchema.Parse(request.Schema); 
JToken json = JToken.Parse(request.Json); 

// validate json 
IList<ValidationError> errors; 
bool valid = json.IsValid(schema, out errors); 

// return error messages and line info to the browser 
return new ValidateResponse 
{ 
    Valid = valid, 
    Errors = errors 
};