重定向到操作并以编程方式调用`tel:123`和在ASP.NET MVC 5中通过控制器的操作在客户端调用`mailto:abc @ def.com`

时间:2014-07-14 23:01:50

标签: .net asp.net-mvc azure hyperlink href

当我们点击链接<a href="tel:123">123</a>时,我们系统的默认呼叫应用程序将调用此号码。

显然,我们可以将此链接添加到Razor视图,然后单击它。但是如果我想建立这个链接不仅默认情况下调用像Skype这样的应用程序而且还重定向到其他操作呢?

我做到了:

  • 通过以下方式创建了一个漂亮的呼叫按钮:<p>@Html.ActionLink("Call Cell Phone", "Call", new { id = Model.Id, number = Model.CellNumber }, new { @class = "btn btn-default" })</p>它转到Call操作,我们传递了我们呼叫的人的ID和该人的号码。

enter image description here

  • 添加了调用操作,我在其中删除了电话号码中的短划线和空格,然后使用System.Diagnostics.Process来调用呼叫:

public string formatPhoneNumber(string number) {
                Regex rgx = new Regex("[^0-9]");
                return rgx.Replace(number, "");
            }

        public ActionResult Call(int id, string number) {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            string formattedNumber = "tel:+48" + formatPhoneNumber(number);
            System.Diagnostics.Debug.WriteLine("NUMBER " + formattedNumber);
            proc.StartInfo.FileName = formattedNumber;
                proc.Start();
                Person person = db.Persons.Find(id);
                return RedirectToAction("Edit", new Person { Id = id });
            }

有效, Skype试图在我的电脑上打电话给某人。我的问题是它在调试模式下工作,但是当我将它发布到Windows Azure时,我认为proc.Start();将在服务器而非客户端调用,这将停止工作。

那么如何从控制器点击客户端的tel:12312341链接?

编辑:我不询问Skype或任何其他来电/拨号程序。我想以编程方式点击tel:...链接。

注意:我将完全控制每个用户的设备,因为每个设备都是我的(员工使用),因此我可以在客户端安装任何程序。如果它有任何帮助。

2 个答案:

答案 0 :(得分:1)

使用以下代码创建一个javascript文件

$(document).ready(function()
{
    window.location.replace("tel:123-456-789");
}

你会想要两种观点。

1)您目前使用按钮说“呼叫单元”的视图 2)包含javascript文件的视图。

视图1中的按钮应该是控制器中操作的动作链接。

在操作中,您需要在调用手机之前添加要执行的代码。

在操作结束时,返回包含javascript文件的视图,并且应该调用该链接,以启动电话。

答案 1 :(得分:1)

浏览器故意限于沙箱环境,以限制网站对客户端系统的访问类型。如果任何网站可以选择性地调用客户端PC上的任何程序,那将是一个巨大的安全漏洞。

执行应用程序客户端的唯一方法是通过精心设计的ActiveX控件,该控件是针对要执行的特定应用程序而创建的。事实上,Skype安装了这种ActiveX控件,它拦截浏览器中的tel:链接以在本地启动Skype客户端。

有可能编写一个能够在客户端机器上执行非常特定的程序的JavaScript函数,la new ActiveXObject("WScript.Shell");,假设您确切地知道执行该进程的命令行,即可执行文件的位置在每台客户端计算机上都是相同的,客户端对未签名的ActiveX控件有松散的限制(主要安全问题),并且用户不选择使用非ActiveX兼容的浏览器。

总而言之,创建一个启动客户端应用程序的网站并不是一个简单的过程。