2016-08-12 3 views
8

Я использую WebApiContrib.Formatting.Jsonp в службе веб-API 2, а также Swagger для документации и тестирования API.Обработка недействительных запросов JSONP в веб-API

Когда я вызвать любой метод JSONP через Swagger, мои сбои службы в файле JsonpMediaTypeFormatter.cs на следующей строке:

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

С одной стороны, я не понимаю, почему Swagger не позволяет указать имя обратного вызова для запросов JSONP. Но что более важно, я не хочу, чтобы служба рушилась из-за этого.

Вопросы:

  • Как мы можем обрабатывать такие ошибки на стороне службы?
  • Есть ли способ сделать Swagger правильно отправлять запросы JSONP? (Например, предварительно определив имя обратного вызова для всех запросов JSONP?)
+1

Использование стельку http://www.telerik.com/ скрипач или что-то подобное, чтобы убедиться, что ваши запросы jsonp хорошо сформированы. Есть ли у вас причина использовать JSONP, а не простой JSON, отличный от CORS? – Stack

+0

Продукты Telerik для .NET - все коммерческие, я не могу использовать их по этой причине, плюс я подозреваю, что это будет излишним типом вопроса, который я задаю. И мне нужен JSONP для обработки запросов среди многих серверов, так что да, CORS - единственная причина, по которой я его использую. –

+2

Его просто бесплатный прокси-сервер отладки. Это бесплатное автономное настольное приложение, не имеющее ничего общего с .NET. Все, что он делает, - это захват ваших HTTP-запросов/ответов для отладки. Вы можете попробовать что-то вроде https://www.getpostman.com/, которое довольно, но не так гибко, как Fiddler. – Stack

ответ

1
PM> Install-Package Newtonsoft.Json.Schema 

Или вы можете загрузить вниз источник в 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 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^