65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 ASP.NET Web API 中使用 Google 地理位置 API 获取地理位置地址

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.85/5 (21投票s)

2016年8月14日

CPOL

3分钟阅读

viewsIcon

45845

downloadIcon

1901

在本文中,我们将学习如何在 ASP.NET Web API 中使用 Google 地理位置 API 获取地理位置地址。

在本文中,我们将学习如何通过在 ASP.NET Web API 中使用 Google 地理位置 API 来获取地理位置地址。 现在我们将开始创建我们的应用程序。 希望您会喜欢。

背景

通常,我们从服务器端或客户端调用 Google 地理位置 API,对吧? 今天,我们使用服务器端。 它是完全动态的。 我们将使用两个工具,一个是 Postman,另一个是 Fiddler。 它们都用于测试 Web API。 此 Google 地理位置 API 依赖于纬度和经度。 这两者都将由我们的客户端控制。 他们会提供数值。

创建数据库

可以使用以下查询在您的 SQL Server 中创建一个数据库。

CREATE DATABASE SalesTracking;

可以使用以下查询在您的 SQL Server 中创建一个表。

CREATE TABLE [dbo].[crm_DailySalesTask](
	[DailySalesTaskID] [bigint] NOT NULL,
	[UserID] [bigint] NULL,
	[BuyerName] [nvarchar](max) NULL,
	[Description] [nvarchar](max) NULL,
	[Achivement] [nvarchar](max) NULL,
	[Latitude] [nvarchar](max) NULL,
	[Longitude] [nvarchar](max) NULL,
	[Address] [nvarchar](max) NULL,
	[company_name] [nvarchar](max) NULL,
	[CreateDate] [datetime] NULL,
 CONSTRAINT [PK_crm_DailySalesTask] PRIMARY KEY CLUSTERED 
(
	[DailySalesTaskID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, _
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

创建 Web 应用程序

启动 Visual Studio 文件 > 新建 > 项目并单击。 新建项目窗口将显示在您的显示器上。 选择 Web 并选择 ASP.NET Web 应用程序 (.NET Framework) 并输入名称并单击确定按钮一次,再次一个新的窗口将显示在您的显示器上。 从以下弹出窗口中,选择 Web API 并单击确定按钮一次。

3

图:Web API 模板,为 MVC 和 Web API 添加文件夹和核心引用。 将为您创建一个具有核心引用的 MVC 文件夹结构的项目。

Untitled

创建实体数据模型

右键单击您的模型文件夹,然后单击新建,选择 ADO.NET 实体数据模型。 按照给定的步骤操作。 完成该过程后,您可以在您的模型文件夹中看到 edmx 文件和其他文件。 在这里,我为我们的实体数据模型名称提供了 SalesTrackingEntities。 现在您可以看到一个具有 edmx 扩展名的文件已创建。

创建 ResponseModel 类

我们将在模型文件夹中创建 ResponseModel 类。 实际上,此类将用于返回类型。 以下是代码

  public class ResponseModel
    {
        public string Message { set; get; }
        public bool Status { set; get; }
        public object Data { set; get; }
    }

创建虚拟类

我们将在模型文件夹中创建虚拟类,以下是查询。

 public class vmTask
    {
        public Int64 UserID { get; set; }
        public string BuyerName { get; set; }
        public string Achivement { get; set; }
        public string Latitude { get; set; }
        public string Longitude { get; set; }
        public string Address { get; set; }        
        public string Description { get; set; }
    }

创建 API 控制器

右键单击 Controllers 文件夹,添加 > 控制器,选择 Web API 2 控制器 - 空,然后命名控制器,单击确定。

public class TaskController : ApiController
    {
        SalesTrackingEntities _dbContext = null;

        // constructor 
        public TaskController()
        {
            _dbContext = new SalesTrackingEntities();
        }
        // for Task save
        [HttpPost]
        public ResponseModel SaveTask(vmTask _vmTask)
        {
            ResponseModel _modelObj = new ResponseModel;
            int result = SaveTaskDetails(_vmTask);
            if (result == 1)
            {
                _modelObj.Status = true;
                _modelObj.Message = "Task Saved";
            }
            else
            {
                _modelObj.Status = false;
                _modelObj.Message = "Task Saved faill";
            }
            return _modelObj;
        }

        [HttpGet]
        // for get Task data by UserID
        public ResponseModel GetTaskList(Int64 userID)
        {
            ResponseModel _modelObj = new ResponseModel();
            List<vmTask> taskes = GetTaskDetails(userID);
            if (taskes.Count > 0)
            {
                _modelObj.Data = taskes;
                _modelObj.Status = true;
                _modelObj.Message = "Data get successfully.";
            }
            else
            {
                _modelObj.Data = taskes;
                _modelObj.Status = false;
                _modelObj.Message = "Data not found.";
            }
            return _modelObj;
        }
        private List<vmTask> GetTaskDetails(long userID)
        {
            List<vmTask> taskes = null;
            try
            {
                taskes = (from ds in _dbContext.crm_DailySalesTask
                          where ds.UserID == userID
                          select new vmTask
                          {
                              UserID = ds.UserID ?? 0,
                              BuyerName = ds.BuyerName,
                              Achivement = ds.Achivement,
                              Description = ds.Description,
                              Address = ds.Address
                          }).ToList();
                return taskes;
            }
            catch
            {
                taskes = null;

            }
            return taskes;
        }
        private int SaveTaskDetails(vmTask _vmTask)
        {
            crm_DailySalesTask _objSalesTask = new crm_DailySalesTask();
            int result = 0;
            string Address = "";
            try
            { 
                 Int64 nextRow = _dbContext.crm_DailySalesTask.Count() + 1;
                _objSalesTask.DailySalesTaskID = nextRow;             
                _objSalesTask.UserID = _vmTask.UserID;
                _objSalesTask.BuyerName = _vmTask.BuyerName;
                _objSalesTask.Description = _vmTask.Description;
                _objSalesTask.Achivement = _vmTask.Achivement;
                _objSalesTask.Latitude = _vmTask.Latitude;
                _objSalesTask.Longitude = _vmTask.Longitude;
                Address = GetAddress(_objSalesTask.Latitude, _objSalesTask.Longitude);
                _objSalesTask.Address = Address;
                _dbContext.crm_DailySalesTask.Add(_objSalesTask);
                _dbContext.SaveChanges();
                result = 1;
            }
            catch
            {
                result = 0;

            }
            return result;
        }
        // get Address
        private string GetAddress(string latitude, string longitude)
        {
            string locationName = "";
            string url = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},
                         {1}&sensor=false", latitude, longitude);
            XElement xml = XElement.Load(url);
            if (xml.Element("status").Value == "OK")
            {
                locationName = string.Format("{0}",
                    xml.Element("result").Element("formatted_address").Value);
            }
            return locationName;
        }
    }

我们将演示我们的 TaskController。 首先,我想说的是,在这个项目中,我没有使用任何存储库模式或任何多层。 我已在 TaskController 中完成了所有编码。

 SalesTrackingEntities _dbContext = null;

我们刚刚指向了 _dbContext 实例。

 // constructor 
        public TaskController()
        {
            _dbContext = new SalesTrackingEntities();
        }

我们在 TaskController 构造函数中创建了 SalesTarackingEntities 的实例,因为访问所有表并使用 linq。

 // for Task save
        [HttpPost]
        public ResponseModel SaveTask(vmTask _vmTask)
        {
            ResponseModel _modelObj = new ResponseModel();
            int result = SaveTaskDetails(_vmTask);
            if (result == 1)
            {
                _modelObj.Status = true;
                _modelObj.Message = "Task Saved";
            }
            else
            {
                _modelObj.Status = false;
                _modelObj.Message = "Task Saved faill";
            }
            return _modelObj;
        }

我们使用 HttpPost 用于 SaveTask 方法,我们从我们的世界中获取 vmTask 对象作为参数。 当我们使用 fiddler 或 postman 测试此方法时,我们将看到如何从我们的世界传递 vmTask 对象。 我们调用 SaveTaskDetails 方法来保存,此方法存在于 TaskController 中。

    private int SaveTaskDetails(vmTask _vmTask)
        {
            crm_DailySalesTask _objSalesTask = new crm_DailySalesTask();
            int result = 0;
            string Address = "";
            try
            {
                Int64 nextRow = _dbContext.crm_DailySalesTask.Count() + 1;
               _objSalesTask.DailySalesTaskID = nextRow;
                _objSalesTask.UserID = _vmTask.UserID;
                _objSalesTask.BuyerName = _vmTask.BuyerName;
                _objSalesTask.Description = _vmTask.Description;
                _objSalesTask.Achivement = _vmTask.Achivement;
                _objSalesTask.Latitude = _vmTask.Latitude;
                _objSalesTask.Longitude = _vmTask.Longitude;
                Address = GetAddress(_objSalesTask.Latitude, _objSalesTask.Longitude);
                _objSalesTask.Address = Address;
                _dbContext.crm_DailySalesTask.Add(_objSalesTask);
                _dbContext.SaveChanges();
                result = 1;
            }
            catch
            {
                result = 0;

            }
            return result;
        }

我们可以在上述方法中看到我们只是使用 linq 保存在数据库中,并且我们使用两个参数调用了 GetAddress 方法。 此方法是我们的主要关注点。 以下是代码。

private string GetAddress(string latitude, string longitude)
        {
            string locationName = "";
            string url = string.Format
            ("http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false", 
            latitude, longitude);
            XElement xml = XElement.Load(url);
            if (xml.Element("status").Value == "OK")
            {
                locationName = string.Format("{0}",
                    xml.Element("result").Element("formatted_address").Value);
            }
            return locationName;
        }

在此方法中,我们使用 Google API 和两个参数 latitudelongitude 来获取地址。 我们使用了 XElement 类和 Load static 方法来获取 API 的响应。 获取位置名称后,我们返回位置名称。

按用户 ID 获取任务列表

private List<vmTask> GetTaskDetails(long userID)
        {
            List<vmTask> taskes = null;
            try
            {
                taskes = (from ds in _dbContext.crm_DailySalesTask
                          where ds.UserID == userID
                          select new vmTask
                          {
                              UserID = ds.UserID ?? 0,
                              BuyerName = ds.BuyerName,
                              Achivement = ds.Achivement,
                              Description = ds.Description,
                              Address = ds.Address
                          }).ToList();
                return taskes;
            }
            catch
            {
                taskes = null;

            }
            return taskes;
        }

我们的代码已准备就绪。 所以我们将检查。

通过 Postman 检查

对于 HttpPost

12323

哇,它完成了。 好的,让我们看看 HttpGet

5645645

它现在总是有效。

通过 Fiddler 检查

对于 HttpPost

fid1212

我们的结果如下所示

ferere3434

它完成了。 好的,让我们看看 HttpGet

fiddler4343

希望这会有所帮助。 编码愉快! :)

© . All rights reserved.