2013-06-27 4 views
9

Кто-нибудь знает, если возврат JSONP поддерживается из коробки в .net 4.5 ASP.NET WEB API?.net 4.5 ASP.Net web API Поддержка JSONP

Я нашел много «рулонов» для более ранних версий MVC или .net, но, похоже, для более поздних версий не существует ничего конкретного.

Я понимаю, что это может быть потому, что они более ранние версии будут работать с .net 4.5 стеком, но мне очень интересно, если кто-то уже запеченный в.

ответ

13

Насколько я знаю, вы должны получить JSONP форматировщик. Вот одна из реализаций:

http://nuget.org/packages/WebApi.JsonP

UPDATE

Рекомендуемый пакет предоставляется в настоящее время командой WebApiContrib:

https://www.nuget.org/packages/WebApiContrib.Formatting.Jsonp

Добавьте его в Global. asax при запуске приложения:

GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonpMediaTypeFormatter(new JsonMediaTypeFormatter())); 

Пример использования с JQuery можно найти в here

+0

Спасибо, что у меня была такая же проблема, как это разрешилось. Я вижу вокруг Интернета. Jsonp немного освещает документацию по сравнению с JSON. Есть ли какие-либо ссылки помимо найденных в вашем сообщении, которые вы нашли полезными для реализации? – sleath

+1

JSONP - фактически объект JSON, но он завернут в вызов функции Javascript, указанный клиентом (параметр обратного вызова). Я не думаю, что для этого необходима документация. Он просто работает с использованием форматирования и любой jsonp-библиотеки javascript (например, jQuery). Я нашел сообщение Stackoverflow о том, что кто-то объясняет это более подробно: http://stackoverflow.com/questions/2067472/what-is-jsonp-all-about. Также обновлен мой ответ с новым рекомендованным пакетом. – mbudnik

2

Мне нравится этот пакет WebApiContrib.Formatting.Jsonp NuGet

Добавить форматировщик в Application_Start:

GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonpMediaTypeFormatter(new JsonMediaTypeFormatter())); 
0

Я также в конечном итоге с помощью WebApiContrib.Formating.Jsonp NuGet Package, но сохраняя возможность перенастроить Json без заполнения, если нет параметра обратного вызова.

Так что только Jsonp IF, если параметр обратного вызова i предоставлен.

Добавляя (от HowTo) до Global.asax.cs - Application_Start()

GlobalConfiguration.Configuration.AddJsonpFormatter(); 
3

Это был первый пост я нашел и был самым полезным, но она по-прежнему осталось аа несколько вопросов, и я нашел несколько проблем с некоторыми ответами, в то время как я смог заставить его работать из-за всех ответов, я хотел добавить то, что я узнал, потому что он, кажется, высок в результатах поиска.
Я установил https://www.nuget.org/packages/WebApiContrib.Formatting.Jsonp и смог заставить его работать после того, как я добавил

GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonpMediaTypeFormatter(new JsonMediaTypeFormatter())); 

моей Global.asax на startas приложение Alex пшенице и mbudnik ответил, что заставило CORS прекратить работу на других частях моего API, который был полностью реализован.

У меня теперь все работает правильно и выучил несколько вещей из github разработчика пакета.

после установки пакета nuget, Добавьте следующее в свой Global.asax файл

GlobalConfiguration.Configuration.AddJsonpFormatter(); 

затем, если вы звоните в службу, используя ниже Jquery, просто замените URL с URL, и вы можете увидеть результаты в вас утешит. Я также рекомендую установить Fiddler Web Debugger, потому что это поможет вам устранить неполадки.

$.ajax({ 
    url: 'http://jsfiddle.net/echo/jsonp/', 
    type: 'GET', 
    contentType: 'text/javascript', 
    crossDomain: true, 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function(jqXHR,status,error) { 
    console.log(error); 
    } 
}); 

CONTENTTYPE: 'текст/JavaScript' важно. Это то, что сообщает веб-апи использовать Jsonp Formatter.

Не включают в себя тип данных «JSONP» - пример ниже

 ...type: 'GET', 
    dataType: 'jsonp', 
    crossDomain: true,... 

это приведет к Web API использовать JsonMediaTypeFormatter и вы получите «JQuery randomfunctionstring не был назван parsererror» ошибка. Я знаю это из личного проб и ошибок. Надеюсь, это поможет кому-то другому.