分布式技术 webapi 路由追加html、aspx、shtml 适用于 对接 安卓、IOS

首先是这样,在对接安卓和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=1,Name="张三", Age=100, Email="[email protected]", Adress="北京"},
            new UsersInfo{Id=2,Name="李四", Age=222, Email="[email protected]", Adress="北京"},
            new UsersInfo{Id=3,Name="王五", Age=333, Email="[email protected]", Adress="北京"},
            new UsersInfo{Id=4,Name="侯六", Age=444, Email="[email protected]", 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>
时间: 2024-10-12 04:47:29

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

分布式技术 webapi

webapi可以返回json.xml类型的数据,对于数据的增.删.改.成,提供对应的资源操作,按照请求的类型进行相应的处理,主要包括 Get(查).Post(增).Put(改).Delete(删),这些都是HTTP协议支持的请求方式. webapi 的请求方式:根据路由规则请求. webservice和webapi两种web服务的比较: webservice :基于SOAP风格的网络服务,使用方法进行请求. webapi:基于REST 风格的网络服务.使用资源进行请求. webapi中5个方法分

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

前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: 它可以很神秘:你的url可以千变万化,看到一些看似“无厘头”的url,感觉很难理解它如何找到匹配的action,例如/api/user/1/detail,这样一个url可以让你纠结半天. 它可以很晦涩:当面试官提问“请简单分析下MVC路由机制的原理”,你可能事先就准备好了答案,然后噼里啪啦一顿(型如

下一代互联网技术(路由配置)

下一代互联网技术: 2016.10.6 一.ipv6静态路由小结: 静态路由分为3类: 1.直连静态路由配置:(config)#ipv6 route 目标网段+本地送出接口 2.递归静态路由配置:(config)#ipv6 route 目标网段+下一跳地址 3.完全静态路由配置:(config)#ipv6 route 目标网段+本地送出接口+下一跳地址 还有相关命令: #show ipv6 interface #show ipv6 route #show ipv6 neighbors (conf

分布式技术一周技术动态 2016-09-11

searcher 分布式纵向方向主要涵盖的范围包括分布式系统理论和设计实践, 资源管理和虚拟化技术, 大规模服务稳定性技术, DevOps和自动运维技术等方面, “分布式方向一周技术动态"是我每周总结和整理的关于分布式方向的精选技术文章, 希望以此让大家能够跟踪业界相关的技术动态, 培养大家对分布式系统的兴趣, 学习分布式系统理论和设计思路, 辅助大家的日常工作. 每周的技术动态会在hi群和邮件组里同步发布, 欢迎大家阅读. 对于后续 分布式技术动态 有任何意见或者建议, 大家可以随时联系我.

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

1:socket VS remoting 使用socket无疑是效率最高的.但是,在复杂的接口环境下,socket的开发效率也是最低的.故在兼顾开发效率的情况下,可以使用remoting来代替socket开发.并且:    1.Tcp通道的Remoting速度非常快.    你可以通过端口查看工具,发现remoting比直接socket传输的内容,应该是属于同一个数量级的.我的另一个担心是,大客户端数量的情况下,remoting传输效率会不会很低,结果经过现场测试,同时对300个客户端进行数据通

构建大型云计算平台分布式技术的实践

作者 章文嵩 发布于 2014年7月23日 | 本文基于章文嵩博士在2014年7月18日的全球架构师峰会ArchSummit上的主题演讲<构建大型云计算平台分布式技术的实践>整理而成. 演讲者简介 章文嵩博士是阿里集团的高级研究员与副总裁,主要负责基础核心软件研发和云计算产品研发.推进网络软硬件方面的性能优化.搭建下一代高可扩展低碳低成本电子商务基础设施.他也是开放源码及Linux内核的开发者,著名的Linux集群项目LVS(Linux Virtual Server)的创始人和主要开发人员.L

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

搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topic和parition 4副本(replication)策略:主从broker部署和partition备份,以及选主机制 5kafka消息分组,通过comsumergroup实现主体订阅 6push和pull的区别,顺序写入和消息读取,零拷贝机制 Kafka的基本介绍 Kafka是最初由Linkedi

搞懂分布式技术1:分布式系统的一些基本概念

搞懂分布式技术1:分布式系统的一些基本概念 1.分布式 小明的公司又3个系统:系统A,系统B和系统C,这三个系统所做的业务不同,被部署在3个独立的机器上运行,他们之间互相调用(当然是跨域网络的),通力合作完成公司的业务流程. 将不同的业务分部在不同的地方,就构成了一个分布式的系统,现在问题来了,系统A是整个分布式系统的脸面,用户直接访问,用户访问量大的时候要么是速度巨慢,要么直接挂掉,怎么办? 由于系统A只有一份,所以会引起单点失败... 2.集群(Cluster) 小明的公司不差钱,就多买几台

搞懂分布式技术13:缓存的那些事

搞懂分布式技术13:缓存的那些事 缓存和它的那些淘汰算法们 为什么我们需要缓存? 很久很久以前,在还没有缓存的时候--用户经常是去请求一个对象,而这个对象是从数据库去取,然后,这个对象变得越来越大,这个用户每次的请求时间也越来越长了,这也把数据库弄得很痛苦,他无时不刻不在工作.所以,这个事情就把用户和数据库弄得很生气,接着就有可能发生下面两件事情: 1.用户很烦,在抱怨,甚至不去用这个应用了(这是大多数情况下都会发生的) 2.数据库为打包回家,离开这个应用,然后,就出现了大麻烦(没地方去存储数据