Elemar DEV

Tecnologia e desenvolvimento .net

Suportando JSONP (contornando a “Política da mesma origem”) no ASP.net WEB API

Olá pessoal. Tudo certo?!

Há algum tempo mostrei como entregar um mesmo recurso em diferentes formatos, usando ASP.net Web API.

ASP.net Web API suporta, nativamente, XML e JSON. Entretanto, clientes Javascript, em domínios diferentes, podem ter problema para acessar dados nesses formatos devido a uma restrição de segurança chamada “Política de Mesma Origem”. JSONP é uma técnica que contona esse problema.

Nesse post, mostro como utilizar JSONP com ASP.net Web API.

Se você não conhece Web API, talvez deva considerar ver outros posts sobre este assunto.

Um request JSONP com JQuery

O snippet abaixo mostra um request em “JSONP” (leia na Wikipedia para entender a “dinâmica” do jsonp):

O segredo, aqui, é o “?” no final da URL. Veja como fica a URL no request, quando utilizamos o Internet Explorer (utilizando Fiddler para monitoramento).

image_thumb3

Repare que:

  1. o JQuery “inventa” um nome para o callback.
  2. Accept é “text/javascript, application/javascript”

Importante destacar que a primeira condição sempre será verdadeira. A segunda, não.

Implementando o Formatter

Abaixo, você encontra o Formatter escrito para ASP.net Web API. A técnica é parecida com aquela que utilizamos para escrever formatters há algum tempo.

A novidade, aqui, é o método GetPerRequestFormatter. Ele está entre as novidades do WebAPI RC. Com ele, podemos criar um formatter, personalizado, por request.

Repare que nosso formatter consegue atender requests json e jsonp.

Garantindo que o Formatter será usado em requests JSONP

Como indiquei acima, requests jsonp sempre informam o nome de uma função de callback. Entretanto, nem sempre especificam o “Accept” adequadamente. Para contornar o problema, precisamos colocar nosso formatter “na frente” daqueles fornecidos pela infra do Web API. Veja como conseguimos isso:

Pegou a idéia?!

Era isso.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Informação

Publicado às 16/07/2012 por em Post e marcado , , , .

Estatísticas

  • 429,496 hits
%d bloggers like this: