首先是这样,在对接安卓和IOS或者是第三方调用的接口,我需要在服务端返回一个带.html/.aspx这样后缀的接口。

例子如下图:http://localhost:64131/api/UsersInfo/GetAllUsersInfo.html

当然,我们用的肯定是webapi 来做这件事情。不需要建aspx/html/do/shtml...这样的文件,只需要配置一下路由就可以了。

首先要打开:WebApiConfig 这个配置文件。需要将

 routeTemplate: "api/{controller}/{action}/{Id}",

修改成:

如果要想是aspx,那么就修改成

 routeTemplate: "api/{controller}/{action}.aspx",

如果要想是html,那么就修改成

 routeTemplate: "api/{controller}/{action}.html",

修改完成代码如下:

 public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}.html",
defaults: new { id = RouteParameter.Optional }
); // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
// 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
// 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。
//config.EnableQuerySupport(); // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
// 有关详细信息,请参阅: http://www.asp.net/web-api
config.EnableSystemDiagnosticsTracing();
//将webapi中的XmlFormatter 移除,默认就是以JsonFormatter作为其传输格式
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
}

webapi Controller代码:

namespace WebApiApp.Controllers
{
public class UsersInfoController : ApiController
{ UsersInfo[] usersInfos = new UsersInfo[]
{
new UsersInfo{Id=,Name="张三", Age=, Email="abcd@126.com", Adress="北京"},
new UsersInfo{Id=,Name="李四", Age=, Email="abcd@126.com", Adress="北京"},
new UsersInfo{Id=,Name="王五", Age=, Email="abcd@126.com", Adress="北京"},
new UsersInfo{Id=,Name="侯六", Age=, Email="abcd@126.com", Adress="北京"}
}; /// <summary>
/// /api/Contact
/// </summary>
/// <returns></returns>
public IEnumerable<UsersInfo> GetListAll()
{
return usersInfos;
} /// <summary>
/// 获取全部数据
/// </summary>
/// <returns></returns>
public ReturnJson GetAllUsersInfo()
{
return new ReturnJson { data = usersInfos };
} /// <summary>
/// 根据Id 获取数据
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public UsersInfo GetUsersInfoById(int Id,[FromBody]string value )
{
var usersInfo = usersInfos.FirstOrDefault((u) => u.Id == Id);
return usersInfo;
} public class ReturnJson
{
public int count { get; set; }
public object data { get; set; }
public string msg { get; set; }
}
}
}

新建一个html页面,供测试使用:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title> </head> <body>
<div>
<h3>所有用户</h3> <ul id="usersinfos">
<script type="html/javascript" id="js:usersinfos">
{{each data as list i}}
<li> Id:{{list.Id}} , Name:{{list.Name}},Age:{{list.Age}},Email: {{list.Email}},Adress:{{list.Adress}}</li>
{{/each}}
</script>
</ul> </div>
<div>
<h3>查询</h3>
<input type="text" id="Id" size="15" />
<input type="button" value="查询" onclick="GetUsersInfoById() " />
<ul id="usersinfo"></ul>
</div> <script src="Scripts/jquery-1.8.3.min.js"></script>
<script src="Scripts/template.js"></script>
<script src="Scripts/mui.min.js"></script>
<script src="Scripts/app.js"></script>
<script type="text/javascript">
var url_api = 'api/UsersInfo/'; $(function () {
GetAllUsersInfo();
}) function GetAllUsersInfo() {
var strli = "";
$.ajax({
type: 'GET',
url: 'api/UsersInfo/GetAllUsersInfo.html',
async: true,//同步
dataType: 'json',
success: function (data) {
var jsondata = data.data;
var list_html = template('js:usersinfos', data);
$('#usersinfos').append(list_html); //$.each(json, function (i, n) {
// strli += "<li>";
// strli += 'Id:' + n.Id + ',' + 'Name:' + n.Name + ',' + 'Age:' + n.Age + ',' + 'Email:' + n.Email + ',' + 'Adress:' + n.Adress + '';
// strli += '</li>';
//}) //$("#usersinfos").html(strli); },
error: function (xhr, status, error) {
alert("操作失败");
}
});
} function GetUsersInfoById() {
var strli_ById = "";
var Id = $('#Id').val();
$.ajax({
type: 'GET',
url: 'api/UsersInfo/GetUsersInfoById.html',
async: true,//同步
dataType: 'json',
data: { 'Id': Id },
success: function (json) { strli_ById += "<li>";
strli_ById += 'Id:' + json.Id + ',' + 'Name:' + json.Name + ',' + 'Age:' + json.Age + ',' + 'Email:' + json.Email + ',' + 'Adress:' + json.Adress + '';
strli_ById += '</li>'; $("#usersinfo").html(strli_ById);
},
error: function (xhr, status, error) {
alert("操作失败");
}
}); } </script>
</body>
</html>

报文:

PS:如果http://localhost:64131/api/UsersInfo/GetAllUsersInfo.html 报404,往下看↓

1.MVC4 版本以上 不支持 直接在路由中配置.html/.aspx/.shtml

我们需要在webconfig中配置一下

    <modules runAllManagedModulesForAllRequests="true" /> :

2.如果用到了 webapi 中的put 、delete 等rest操作,需要配置一下

  <handlers>
<remove name="WebDAV"/> <!--PUT DELETE 放开-->
</handlers> 全部代码如下:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" /> <handlers>
<remove name="WebDAV"/> <!--PUT DELETE 放开-->
</handlers> </system.webServer>

分布式技术 webapi 路由追加html、aspx、shtml 适用于 对接 安卓、IOS的更多相关文章

  1. 分布式技术 webapi

    webapi可以返回json.xml类型的数据,对于数据的增.删.改.成,提供对应的资源操作,按照请求的类型进行相应的处理,主要包括 Get(查).Post(增).Put(改).Delete(删),这 ...

  2. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?

    前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...

  3. .Net 分布式技术比较

    内容转自于 http://www.mamicode.com/info-detail-585547.html .NET 分布式技术比较 1. MSMQ(Microsoft Message Queue) ...

  4. 搞懂分布式技术21:浅谈分布式消息技术 Kafka

    搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topi ...

  5. 搞懂分布式技术28:微服务(Microservice)那点事

    搞懂分布式技术28:微服务(Microservice)那点事 微服务(Microservice)那点事 肥侠 2016-01-13 09:46:53 浏览58371 评论15 分布式系统与计算 微服务 ...

  6. 搞懂分布式技术11:分布式session解决方案与一致性hash

    搞懂分布式技术11:分布式session解决方案与一致性hash session一致性架构设计实践 原创: 58沈剑 架构师之路 2017-05-18 一.缘起 什么是session? 服务器为每个用 ...

  7. 搞懂分布式技术10:LVS实现负载均衡的原理与实践

    搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...

  8. 【C#】 WebApi 路由机制剖析

    C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转自:https://blog.csdn.net/wulex/article/details/71601478 2017年05月11日 10 ...

  9. 现有分布式技术(socket、.net remoting、asp.net webservice、WSE、ES)和wcf的比较及优势

    1:socket VS remoting 使用socket无疑是效率最高的.但是,在复杂的接口环境下,socket的开发效率也是最低的.故在兼顾开发效率的情况下,可以使用remoting来代替sock ...

随机推荐

  1. jq 选择器基础及拓展

    jquery 用的很多,所以jq的选择器就很受欢迎,但是用的过程中有一些小问题,如果不点透就永远不知道. 1:ID选择器:$("#ID"); 得到一个指定对应,并且只能得到一个对象 ...

  2. 【BZOJ1264】[AHOI2006]基因匹配Match DP+树状数组

    [BZOJ1264][AHOI2006]基因匹配Match Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而 ...

  3. [LintCode] 尾部的零

    class Solution { public: // param n : description of n // return: description of return long long tr ...

  4. 使用ODBC 数据库 ,运行程序时 出现 “遇到不适当的参数”

    我知道的一种情况是 数据库打开了,没有关闭,再次调用数据库打开函数,会出现这样错误.当然是打开同一个数据库同一张表.

  5. The Log: What every software engineer should know about real-time data's unifying abstraction

    http://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-abo ...

  6. java工程编写manifest文件

    如果需要一个可以单独运行的jar包“Runnable JAR file”,省事的方法是妥妥的选择打一个可运行的jar包“Runnable JAR file”.如此一来,就可以把程序运行所依赖的类.第三 ...

  7. Set 接口常用子类及其特点

    Set 集合中元素不可重复,是无序的(存入和取出的顺序是不一样的), Set 接口中的方法和 Collection 接口一致. 常用子类: HashSet : 内部数据结构是哈希表, 是不同步的 Li ...

  8. springmvc控制器controller单例问题

    springmvc controller默认的是单例singleton的,具体可以查看注解scope可以一目了然. 单例的原因有二: 1.为了性能. 2.不需要多例. 1.这个不用废话了,单例不用每次 ...

  9. 利用kubeadm部署kubernetes 1.7 with flannel

    一.Installation 1.安装环境为CentOS 7 2.安装Docker yum install -y docker systemctl enable docker systemctl st ...

  10. CNI插件实现框架---以loopback为示例

    以最简单的loopback插件作为实例,来分析CNI plugin的执行流程 // cni/plugins/loopback/loopback.go 1.func main() main函数只是简单地 ...