自定义协议MVC Redirect在Chrome中工作但不在IE中工作

时间:2015-05-28 10:23:34

标签: asp.net asp.net-mvc

我有一个返回重定向的ActionResult:

        public ActionResult TeamviewerConnect(int id)
        {
          snipped ...
            return Redirect("impacttv://" + Endpoint.tbl_computerinfo.FirstOrDefault().teamviewerID + "::" + teamviewerPassword);
        }

impacttv://是一种自定义协议,可在IE和Chrome中作为标准链接使用。

这在Chrome中运行良好,但IE浏览器中有404s - 有人有想法吗?

1 个答案:

答案 0 :(得分:3)

请参阅:Error redirecting to a custom URL protocol

  

我知道这已经有一段时间了,但是this blog post   描述了自定义协议的重定向行为。

     

坏消息是,重定向不适用于IE。

这说IE不能这样做。我最好的建议是为您的重定向创建一个特殊视图,并使用元重定向或使用JavaScript来设置window.location

另一种选择是将初始调用作为MVC WebApi AJAX方法进行,返回Uri然后设置位置,以便用户不会离开“开始”##页。我以前使用过最后一种方法,可以确认它确实有用。

MVC WebApi

你需要安装Mvc WebApi nuget软件包,可能还有一些我无法记住的其他软件包:p

<强> TvController.cs

public class TVController: ApiController 
{
    [HttpGet]
    public string TeamviewerConnectUri(int id)
    {
        return "impacttv://" + Endpoint.tbl_computerinfo.FirstOrDefault().teamviewerID + "::" + teamviewerPassword;
    }
}

JS(使用jQuery,因为它默认包含在MVC项目中)

var apiUrl = '/api/tv/TeamviewerConnectUri';

$.get(apiUrl, {id: 1 })
    .then(function(uri)) {
        window.location = uri;
        // window.open(uri);
    });

标准MVC方式

<强> TvController.cs

public class TVController: ApiController 
{
    [HttpGet]
    public ActionResult TeamviewerConnectUri(int id)
    {
        return Json(new {uri = "impacttv://" + Endpoint.tbl_computerinfo.FirstOrDefault().teamviewerID + "::" + teamviewerPassword}, JsonRequestBehavior.AllowGet);
    }
}

JS(使用jQuery,因为它默认包含在MVC项目中)

var apiUrl = '/tv/TeamviewerConnectUri';

$.get(apiUrl, {id: 1 })
    .then(function(data)) {
        window.location = data.uri;
        // window.open(data.uri);
    });