java 调用webapi jsonp_在Web Api中快速实现JSonp

Concept:

同源策略:同源策略是客户端语言中的一个概念,它允许元素获取同一个站点中的资源,请求别的domain中的资源将不会被允许。

跨域资源共享[Cross-origin resource sharing (CORS)]:指的是我们可以通过javascript的Ajax(XMLHttpRequests)请求去访问其他的domain,这种请求通常会被浏览器拒绝,但是我们可以通过一些方法来时的浏览器允许这项操作,我们称之为CORS。

JSONP:由于安全问题,浏览器不允许跨域的Ajax的实现,JSONP(JavaScript Object Notation with Padding )是一个从外部的域抓取JSON数据的方式,他会比其他的实现方式(web proxy and IFrame)更优雅。

JSONP (JavaScript Object Notation with Padding) = JSON data padded with JavaScript function name

更多关于JSONP的介绍:

Implimentation:

1、创建两个项目:WebApi、WebApp,分别任是webapi、MVC项目;

2、在WebApi项目中(1-5均在此项目中),利用Nuget安装WebApiContrib.Formatting.Jsonp;

3、在App_Start文件夹添加FormatterConfig类,类的代码如下:

public static void RegisterFormatters(MediaTypeFormatterCollection formatters)

{

var jsonFormatter = formatters.JsonFormatter;

jsonFormatter.SerializerSettings = new JsonSerializerSettings

{

ContractResolver = new CamelCasePropertyNamesContractResolver()

};

// Insert the JSONP formatter in front of the standard JSON formatter.

var jsonpFormatter = new JsonpMediaTypeFormatter(formatters.JsonFormatter);

formatters.Insert(0, jsonpFormatter);

}

4、在App_Start/WebApiConfig.cs中覆盖原来的路由为:

config.Routes.MapHttpRoute(

name: "DefaultApi",

routeTemplate: "api/{controller}/{id}/{format}",

defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional }

);

5、在global文件中添加一条代码:

FormatterConfig.RegisterFormatters(GlobalConfiguration.Configuration.Formatters);

此时我们已经实现了JSONP了,现在我们来做一个测试:

6、在WebApi项目中的Controller文件夹中添加一个class,代码为:

namespace WebApi.Controllers

{

public class ContactsController:ApiController

{

public IEnumerable GetAllContacts()

{

Contact[] contacts = new Contact[]

{

new Contact{ Name="张三", PhoneNo="123", EmailAddress="zhangsan@gmail.com"},

new Contact{ Name="李四", PhoneNo="456", EmailAddress="lisi@gmail.com"},

new Contact{ Name="王五", PhoneNo="789", EmailAddress="wangwu@gmail.com"},

};

return contacts;

}

}

public class Contact

{

public string Name { get; set; }

public string PhoneNo { get; set; }

public string EmailAddress { get; set; }

}

}

7、在WebApp中的某个Action的View中代码为:

联系人列表

$(function ()

{

alert("");

$.ajax({

Type       : "GET",

url        : "http://localhost:57826/api/contacts",

dataType   : "jsonp",

success    : listContacts

});

});

function listContacts(contacts) {

alert("");

$.each(contacts, function (index, contact) {

var html = "

  • ";

html += "

Name: " + contact.Name + "";

html += "

Phone No:" + contact.PhoneNo + "";

html += "

Email Address: " + contact.EmailAddress + "";

html += "

";

$("#contacts").append($(html));

});

}

8、通过WebApp中的页面请求WebApi,最终显示的结果为:

584659810daba1a822ae49f59da35cfe.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值