Jquery NET内核-调用一个方法

Jquery NET内核-调用一个方法,jquery,asp.net,.net,asp.net-mvc,asp.net-core,Jquery,Asp.net,.net,Asp.net Mvc,Asp.net Core,我是MVC新手 我有一个简单的应用程序,列出了许多网站的链接,当点击每个链接时,我想增加“使用率”整数 LinksController.cs包含所有CRUD函数,我是否可以在其中添加一个新函数并通过jQuery Ajax调用它? 我正在尝试使用“最佳实践”的方式,而不是退回到使用我在webforms中会做的事情,因此任何建议都是非常受欢迎的。链接单击发生在客户端,因此很简单,当发生这种情况时,您需要某种方式与服务器通信,以便让它知道。有两种可能的方法: 在服务器上有一个端点,用于记录链接单击,然

我是MVC新手

我有一个简单的应用程序,列出了许多网站的链接,当点击每个链接时,我想增加“使用率”整数

LinksController.cs包含所有CRUD函数,我是否可以在其中添加一个新函数并通过jQuery Ajax调用它?
我正在尝试使用“最佳实践”的方式,而不是退回到使用我在webforms中会做的事情,因此任何建议都是非常受欢迎的。

链接单击发生在客户端,因此很简单,当发生这种情况时,您需要某种方式与服务器通信,以便让它知道。有两种可能的方法:

  • 在服务器上有一个端点,用于记录链接单击,然后重定向。基本上你会有一个像
    http://example.com/redirect?url=http%3A%2F%2Ffoo.com
    。最后的那个位只是一个标准的URL,它经过URL编码,因此可以作为查询字符串param传递。在大多数情况下,你真的不需要担心这一点。如果您使用任何Razor帮助程序生成链接,他们将为您对其进行URL编码。然后,您有一个响应
    /redirect/
    路由的操作,在数据库中记录单击,然后重定向到
    url
    。易于理解的然而,这是可以操纵的。例如,用户可以直接从链接中获取
    url
    部分,绕过您的逻辑直接访问。您可以通过不公开重定向到的URL,而只是引用数据库中链接的id来缓解这种情况:
    http://example.com/redirect?link=1234
    ,其中
    1234
    将是链接的主键

  • 使用AJAX通知服务器。这在很大程度上与上面的过程类似:只有在收到服务器的响应后才重定向客户端,而不是服务器端。但是,由于这是在客户端发生的,因此可以禁用或操纵它。您还将被迫以这种方式公开最终的目标URL,这样一个积极的用户就可以挖掘您的源代码,并获取URL以绕过任何“单击”记录。然而,这一过程相当直接:

    $('.redirect').on('click', function (e) {
        e.preventDefault();
        var $link = $(this);
        $.ajax({
            url: '/path/to/action/that/records/click',
            method: 'POST',
            data: { url: $link.attr('href') },
            success: function () {
                location.href = $link.attr('href');
            })
        });
    });
    

  • 另请注意。任何时候,当你讨论在一个数据库中根据某个请求增加某个列时,你需要考虑并发性。Web服务器是多线程的,可以同时处理许多请求。您需要注意同一链接上的点击次数是否同时增加。有关您需要做什么的更多信息,请参阅MSDN。

    在谷歌搜索jQuery ajax。这就是你所需要的。从哪里点击链接?谁点击链接?它们是外部指向链接还是指向应用程序?如何显示链接?有多种方法可以实现这一点,AJAX并不总是必要的,也不是调用服务器端代码的魔杖。当然,您可以在单击链接时调用AJAX操作。您必须覆盖链接的默认行为并调用AJAX操作,然后在操作后手动重定向用户。另一个选项是,每个链接都可以转到站点上的操作,并将目标URL作为参数。该操作可以执行服务器端逻辑,然后将用户重定向到目标URL。它们是外部链接。链接位于中的各种标记中。如果这是最好的方式,我会仔细阅读.ajax。
    $('.redirect').on('click', function (e) {
        e.preventDefault();
        var $link = $(this);
        $.ajax({
            url: '/path/to/action/that/records/click',
            method: 'POST',
            data: { url: $link.attr('href') },
            success: function () {
                location.href = $link.attr('href');
            })
        });
    });