Asp.net mvc 4 在信令集线器中生成路由URL

Asp.net mvc 4 在信令集线器中生成路由URL,asp.net-mvc-4,signalr,Asp.net Mvc 4,Signalr,我想从我的信号器中心生成路由URL 在控制器中,我会执行以下操作: var u = new UrlHelper(this.ControllerContext.RequestContext); string url = u.Action("Index", "Transfer", new { id = 27 }); 或: 但这两种方法在中心内似乎都不相关。有没有一种机制可以用来构建URL?正如David在评论中指出的那样,我是通过同样的途径获得结果的 我的MVC视图有一个属性: public st

我想从我的信号器中心生成路由URL

在控制器中,我会执行以下操作:

var u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("Index", "Transfer", new { id = 27 });
或:


但这两种方法在中心内似乎都不相关。有没有一种机制可以用来构建URL?

正如David在评论中指出的那样,我是通过同样的途径获得结果的

我的MVC视图有一个属性:

public string ReportDownloadUrl { get; set; }
hub方法仅返回要下载的文件的Uid:

public ActionResult GetReport<T>(ReportModel pageModel)
{
    //generate the report and save to an internal server store
    var fileKey = GenerateReport(...);
    //return the unique file id
    return new JsonResult {Data = fileKey, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
}
实际文件下载的控制器操作:

public ActionResult DownloadFile(string id)
{
    //3 first characters of id are file extension in my case
    var format = id.Substring(0, 3);
    var fileFormat = (FileFormat)Enum.Parse(typeof(FileFormat), format, true);
    var file = (KeyValuePair<string, byte[]>)DataStore[id];


    return File(file.Value, fileFormat.ToDescription(), file.Key);
}
public ActionResult下载文件(字符串id)
{
//在我的例子中,id的前3个字符是文件扩展名
var format=id.Substring(0,3);
var fileFormat=(fileFormat)Enum.Parse(typeof(fileFormat),format,true);
var文件=(KeyValuePair)数据存储[id];
返回文件(File.Value、fileFormat.ToDescription()、File.Key);
}

希望它能节省一些人的时间。

您能解释一下为什么您需要在中心内提供这些信息吗?也许还有另一种方法。hub的功能是生成具有唯一文件id的报告。我希望将路由逻辑保留在hub中,因为我需要在客户端中“手动”构建URL。为什么不返回唯一的文件id而不是URL,并在UI中构建链接。然后,中心未连接到视图。在您的视图中构建链接应该很容易,如果您需要更改链接或使用其他版本,则此链接不会内置到中心中。谢谢David,是的,这当然是一个选项。我试图将hub更多地用作对象工厂,供多个客户端使用者使用,但将逻辑添加到UI中肯定是可能的。感谢Alex,我最终做了类似的事情(虽然没有那么整洁-我在客户端脚本中硬编码了URL!)。我已经相应地更新了我的代码,它工作得非常好。
hubMethod(model, fileExtension)
.done(function (ret) {
    if (ret.Data) {
        var url = downloadUrl + "/" + ret.Data;
        DownloadURL(url);
    }
})

function DownloadURL(url) {
    var iframe = document.getElementById("hiddenDownloader");

    if (iframe === null) {
        iframe = document.createElement('iframe');
        iframe.id = "hiddenDownloader";
        iframe.style.visibility = 'hidden';
        document.body.appendChild(iframe);
    }

    iframe.src = url;
}
public ActionResult DownloadFile(string id)
{
    //3 first characters of id are file extension in my case
    var format = id.Substring(0, 3);
    var fileFormat = (FileFormat)Enum.Parse(typeof(FileFormat), format, true);
    var file = (KeyValuePair<string, byte[]>)DataStore[id];


    return File(file.Value, fileFormat.ToDescription(), file.Key);
}