c# - Webapi 计算特定的获取请求

标签 c# asp.net linq rest asp.net-web-api

我有一个包含不同山脉的数据库,在我的 Web Api 中,我试图记录 IP 地址、时间和日期以及特定山脉被访问次数的“计数”。如果用户导航到 api/Mountains/1,那么它应该记录该特定 mountain.name 的 IP 地址、日期时间和计数。但我有点迷失在逻辑中,我不知道如何计算每一座山?我没有存储这些信息,所以我希望它可以保存在内存中。

编辑:(根据答案更新)

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

最佳答案

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

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

}

关于c# - Webapi 计算特定的获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34578322/

相关文章:

c# - 如果数据库中插入新记录,如何更新 SharePoint Online 列表?

c# - Mongodb模式设计问题

javascript - ASP .NET MVC 无法使用 jQuery/JavaScript 提交表单

c# - 使用 LINQ to SQL 进行更新的最有效方式

c# - 加入时在 linq 中排序

c# - Linq 匿名类型成员必须在子查询中声明

c# - 以编程方式在 MSMQ 中添加私有(private)队列

c# - UpdatePanel PostbackTrigger 位于母版页内的用户控件内?

javascript - Microsoft JScript 运行时错误 : 'RequestCompleted' is undefined

c# - 是否有任何工具可以从 XML 创建类以进行反序列化?