2016-01-03 64 views
1

我有一个数据库,持有不同的山脉,并在我的网络Api我试图记录IP地址,时间和日期和“计数”一个特定的山已被访问多少次。如果用户导航到api/Mountains/1那么它应该记录该IP地址,日期时间和该特定的mountain.name的计数。但我有点迷失在逻辑中,我不知道如何计算每个单独的山峰?我不存储这些信息,所以我希望它可以保存在内存中。Webapi计数特定的获取请求

编辑:(从答案已更新)

public class MountainsController : ApiController 
    { 
    private MountainContext db = new MountainContext(); 
    private int Count; 

    static Dictionary<int, string> data; 
    static Dictionary<int, int> dataCounter; 

    static MountainsController() 
    { 
     data = Enumerable.Range(1, 10).ToDictionary(i => i, i => "Mountain " + i.ToString()); 
     dataCounter = Enumerable.Range(1, 10).ToDictionary(i => i, i => 0); 
    } 
    // GET: api/Mountains/5 
    [ResponseType(typeof(Mountain))] 
    public async Task<IHttpActionResult> GetMountain(int id) 
    { 
     Mountain mountain = await db.Mountains.FindAsync(id); 
     if (mountain == null) 
     { 
      return NotFound(); 
     } 
     if (mountain != null) 
     { 
      string mountainName = data[id]; 
      dataCounter[id] = dataCounter[id] + 1; 
      Count = dataCounter[id]; 
      var host = ((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.UserHostAddress + "," + mountain.Name + "," + DateTime.Now + "," + Count; 
      System.IO.File.AppendAllText(@"C:\myfile.txt", host); 
     } 

     return Ok(mountain); 
    } 

回答

1

如果需要计数器数据只在内存中,你可以使用静态辞典。 看看这个

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; } 
    } 

}