.Net Web Api——获取客户端浏览器信息

简介:         第一次接触到web api,发现这个东西是REST风格的:----         微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是.


        第一次接触到web api,发现这个东西是REST风格的:----


        微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下:


        GET:生到数据列表(默认),或者得到一条实体数据

        POST:添加服务端添加一条记录,记录实体为Form对象

        PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输

        DELETE:删除 服务端的一条记录


        因为之前看一个hybird app的接口设计,发现就是这种风格的,貌似用的很多,作为小白的我就心里mark了一下,希望能在自己项目组的hybird app的项目中用到。


       下面来写个简单web api的例子,来看下web api的使用及获取client的信息:


        1,首先建立一个web api的项目;

        2,加入controller跟model:


                  


       user类:

             

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace BrowerTest.Models
{
    public class User
    {
        public int Id { get; set; }
        public String UName { get; set; }
        public int UAge { get; set; }
        public String UAddress { get; set; }

    }
}

    Controller类:


           

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.ServiceModel;
using System.ServiceModel.Channels;



namespace BrowerTest.Controllers
{
    public class UserController : ApiController
    {
       

        public List<BrowerTest.Models.User> GetUser(HttpRequestMessage httpreq)
            
        {
           
            //返回数据
            var userList = new List<BrowerTest.Models.User> { 
            new BrowerTest.Models.User{ Id=1,UName="张三",UAge=12,UAddress="海淀区"},
            new BrowerTest.Models.User{Id=2,UName="李四",UAge=23,UAddress="昌平区"},
            new BrowerTest.Models.User{Id=3,UName="王五",UAge=34,UAddress="朝阳区"}
            };

            var temp = (from u in userList
                        select u).ToList();
            return temp;
        }
    }
}

        之后,run下看看,因为我这里没有定义路由,所以使用默认路由,访问地址为:http://****/api/controllerName/actionName  。例如:http://localhost:12333/api/user/getuser。


      3,通过HttpRequestMessage获取请求信息


           

  public class UserController : ApiController
    {
        /*
         * 获取客户端IP地址--------------
         方法说明: this version will return a string with the client IP. If it returns ::1 that means the client is requesting from the same computer as where the API is running. The query address will be something like http://yoursite/api/ip depending on your routing.
         * (此方法会返回一个IP字符;如果为“::1”表示客户端的请求来自跟api接口相同的PC机上面。)
         * 方法来源:http://www.herlitz.nu/2013/06/27/getting-the-client-ip-via-asp-net-web-api/  (国外网站,在stackoverflow上看到的)
         */
        private string GetClientIp(HttpRequestMessage request = null)
          {
                request = request ?? Request;

                if (request.Properties.ContainsKey("MS_HttpContext"))
                {
                      return   ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
                }
                else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
                {
                     RemoteEndpointMessageProperty prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
                     return prop.Address;
                }
                else if (HttpContext.Current != null)
                {
                    return HttpContext.Current.Request.UserHostAddress;
                }
                else
                {
                      return null;
                }
           }
     

        public List<BrowerTest.Models.User> GetUser(HttpRequestMessage httpreq)
            
        {
           /*读取客户端信息*/
            httpreq.GetUrlHelper().ToString();
            String url=httpreq.RequestUri.ToString();//当前页面地址
            String userAagent = httpreq.Headers.UserAgent.ToString();//User-Agent全部信息:里面包含浏览器版本跟操作系统版本
            String ClientIp = GetClientIp(httpreq);//客户端IP地址


            //返回数据
            var userList = new List<BrowerTest.Models.User> { 
            new BrowerTest.Models.User{ Id=1,UName="张三",UAge=12,UAddress="海淀区"},
            new BrowerTest.Models.User{Id=2,UName="李四",UAge=23,UAddress="昌平区"},
            new BrowerTest.Models.User{Id=3,UName="王五",UAge=34,UAddress="朝阳区"}
            };

            var temp = (from u in userList
                        select u).ToList();
            return temp;
        }
    }

       

       感觉用起来跟Asp.net 的controller差不多,挺适合做接口的,还没深入研究内部原理,mark下,有空用spring mvc做个java版的。









         


目录
相关文章
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
113 3
|
13天前
|
人工智能 前端开发 计算机视觉
Inpaint-Web:纯浏览器端实现的开源图像处理工具
在刷短视频时,常看到情侣在景区拍照被路人“抢镜”,男朋友用手机将路人“P”掉,既贴心又有趣。最近我发现了一个纯前端实现的开源项目——inpaint-web,可在浏览器端删除照片中的部分内容,非常酷。该项目基于 WebGPU 和 WASM 技术,支持图像修复与放大,已在 GitHub 上获得 5.1k Star。项目地址:[GitHub](https://github.com/lxfater/inpaint-web)。
55 3
 Inpaint-Web:纯浏览器端实现的开源图像处理工具
|
22小时前
|
缓存 算法 API
查询域名WHOIS信息免费API接口教程
该API用于查询顶级域名的WHOIS信息,不支持国别域名和中文域名。通过POST或GET请求,需提供用户ID、KEY及待查询域名。返回信息包括域名状态、注册商、时间等详细数据。示例与文档见官网。
|
19天前
|
JSON 数据挖掘 API
电商信息指南:API接口淘宝关键词、店铺所有商品获取
要获取淘宝关键词商品数据和店铺所有商品的API接口,需先注册淘宝开放平台账号并创建应用,获取API密钥。接着,使用密钥获取访问令牌,详细阅读API文档,构造并发送API请求,解析响应数据。特别地,使用`item_search_shop`接口可获取店铺内所有商品信息。
|
2月前
|
JSON 安全 API
抖音店铺商品信息的 API
抖音店铺商品信息的 API 主要用于获取商品的详细信息,包括基本信息、属性、库存、评价、推广信息等。开发者需注册账号、申请权限、阅读文档、发送请求并处理响应。此外,还提供商品搜索和管理接口,帮助商家优化商品展示和管理订单,提高运营效率。使用时需遵守平台规则,确保数据安全和合法性。
|
2月前
|
Prometheus 监控 Cloud Native
调用淘宝 API 时如何处理错误信息?
调用淘宝API时,需熟悉其错误码体系,处理客户端(如参数错误、权限不足)和服务器(如内部错误、网络问题)错误,编写错误处理逻辑,并进行充分测试与监控,确保API调用稳定可靠。
|
20天前
|
编解码 API 数据库
商品详情 API 接口的返回结果通常包含哪些信息?
商品详情API接口返回的信息涵盖多个方面,主要包括商品基本信息(ID、标题、图片、价格、库存、SKU)、详细描述与规格参数、销售与评价信息(销量、好评率、评价内容、促销活动)、物流与售后信息(发货地、运费模板、退换货政策、保修期限)及店铺信息(ID、名称、评分)和关联推荐信息(相似商品、搭配商品)。这些信息有助于用户全面了解商品并做出购买决策。
|
2月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
96 9
|
23天前
|
Java 测试技术 API
如何利用 1688 API 接口获取商品信息?
利用 1688 API 获取商品信息的步骤包括:注册开发者账号并创建应用,申请 API 权限,获取 API 密钥,了解 API 文档,编写代码调用 API,并进行测试与调试。最终在生产环境中上线应用,确保合法合规使用。
|
2月前
|
Web App开发 XML JavaScript
Python 操作浏览器:让 Python 和 Web 世界合二为一
Python 操作浏览器:让 Python 和 Web 世界合二为一