C# 计算特定get请求的Webapi
我有一个包含不同山脉的数据库,在我的Web Api中,我试图记录IP地址、时间和日期以及特定山脉被访问的次数。如果用户导航到C# 计算特定get请求的Webapi,c#,asp.net,linq,rest,asp.net-web-api,C#,Asp.net,Linq,Rest,Asp.net Web Api,我有一个包含不同山脉的数据库,在我的Web Api中,我试图记录IP地址、时间和日期以及特定山脉被访问的次数。如果用户导航到api/Mountains/1,则应记录ip地址、日期时间以及特定mountain.name的计数。但我有点迷失在逻辑中,我不知道如何计算每一座山?我没有存储这些信息,所以我希望它能被保存在内存中 编辑:(根据答案更新) 公共类Mountains控制器:ApiController { 私有MountainContext db=新的MountainContext(); 私人整
api/Mountains/1
,则应记录ip地址、日期时间以及特定mountain.name
的计数。但我有点迷失在逻辑中,我不知道如何计算每一座山?我没有存储这些信息,所以我希望它能被保存在内存中
编辑:(根据答案更新)
公共类Mountains控制器:ApiController
{
私有MountainContext db=新的MountainContext();
私人整数计数;
静态字典数据;
静态字典数据计数器;
静态山控制器()
{
data=Enumerable.Range(1,10).ToDictionary(i=>i,i=>Mountain+i.ToString());
dataCounter=Enumerable.Range(1,10).ToDictionary(i=>i,i=>0);
}
//获取:api/Mountains/5
[响应类型(类型(山))]
公共异步任务(int id)
{
Mountain Mountain=await db.Mountains.FindAsync(id);
if(mountain==null)
{
返回NotFound();
}
if(mountain!=null)
{
字符串mountainName=数据[id];
dataCounter[id]=dataCounter[id]+1;
计数=数据计数器[id];
var host=((System.Web.HttpContextWrapper)Request.Properties[“MS_HttpContext”]).Request.UserHostAddress+”,“+mountain.Name+”,“+DateTime.Now+”,“+Count;
System.IO.File.AppendAllText(@“C:\myfile.txt”,主机);
}
返回Ok(山);
}
如果只需要内存中的计数器数据,可以使用静态字典。
看看这个
using System.Collections.Generic;
using System.Web.Http;
using System.Linq;
namespace WebApplication3.Areas.api.Controllers
{
public class MountainController : ApiController
{
static Dictionary<int, string> data;
static Dictionary<int, int> dataCounter;
static MountainController()
{
data = Enumerable.Range(1, 10).ToDictionary(i => i, i => "Mountain " + i.ToString());
dataCounter = Enumerable.Range(1, 10).ToDictionary(i => i, i => 0);
}
[HttpGet]
public MountainModel GetMountain(int id)
{
string mountainName = data[id];
dataCounter[id] = dataCounter[id] + 1;
return new MountainModel() { Id = id, Name = mountainName, Count = dataCounter[id] };
}
}
public class MountainModel
{
public int Count { get; set; }
public int Id { get; set; }
public string Name { get; set; }
}
}
使用System.Collections.Generic;
使用System.Web.Http;
使用System.Linq;
命名空间WebApplication3.Areas.api.Controllers
{
公共类MountainController:ApiController
{
静态字典数据;
静态字典数据计数器;
静态山控制器()
{
data=Enumerable.Range(1,10).ToDictionary(i=>i,i=>Mountain+i.ToString());
dataCounter=Enumerable.Range(1,10).ToDictionary(i=>i,i=>0);
}
[HttpGet]
公共MountainModel GetMountain(int id)
{
字符串mountainName=数据[id];
dataCounter[id]=dataCounter[id]+1;
返回新的MountainModel(){Id=Id,Name=mountainName,Count=dataCounter[Id]};
}
}
公共类山体模型
{
公共整数计数{get;set;}
公共int Id{get;set;}
公共字符串名称{get;set;}
}
}
using System.Collections.Generic;
using System.Web.Http;
using System.Linq;
namespace WebApplication3.Areas.api.Controllers
{
public class MountainController : ApiController
{
static Dictionary<int, string> data;
static Dictionary<int, int> dataCounter;
static MountainController()
{
data = Enumerable.Range(1, 10).ToDictionary(i => i, i => "Mountain " + i.ToString());
dataCounter = Enumerable.Range(1, 10).ToDictionary(i => i, i => 0);
}
[HttpGet]
public MountainModel GetMountain(int id)
{
string mountainName = data[id];
dataCounter[id] = dataCounter[id] + 1;
return new MountainModel() { Id = id, Name = mountainName, Count = dataCounter[id] };
}
}
public class MountainModel
{
public int Count { get; set; }
public int Id { get; set; }
public string Name { get; set; }
}
}