通过jquery从c#controller获取文件url

时间:2015-08-20 14:22:53

标签: c# jquery asp.net ajax asp.net-ajax

我有一个c#控制器,它返回系统的状态文件。它会提示用户打开或下载文件。控制器的返回类型实际上是System.Net.Http.HttpResponseMessage。

我设置了这样的路线:/ api / logging / status / {reqID}

如果我直接在我的网络浏览器http://mysite//api/logging/status/12345678中转到该路线,它可以正常工作。

如何通过jquery获取文件的URL,以便我可以将该URL放在achor标记中,如:

<a href="http://path.to.my.status.file/status.txt">Download Status</a>

这是控制器:

[Route("/api/logging/status/{reqID}")]

    public IHttpActionResult GetStatus(Int32 reqID)
    {
        Stream stream;

            stream = new MemoryStream();

            var reqStatus = serializer.SerializeToString(req);
            var bytes = System.Text.Encoding.UTF8.GetBytes(reqStatus);
            stream.Write(bytes, 0, bytes.Length);
            stream.Seek(0, SeekOrigin.Begin);
        }
        var response = new HttpResponseMessage(HttpStatusCode.OK);
        response.Content = new StreamContent(stream);
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        response.Content.Headers.Add("Content-Disposition", String.Format("attachment; filename=\"{0}\"", "status.txt"));
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        return ResponseMessage(response);
    }

我有什么遗失的吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您是否已尝试过以下操作?

$.get('/api/logging/status/12345678', function (data) {
        console.log(data);
    });

答案 1 :(得分:1)

@ 999cm999,

在我看来,您需要另一种服务方法来提供txt文件的路径。您只有一个方法可以将文件本身作为下载提供。这就是浏览器示例的工作原理。

但是,如果要在HTML页面的锚标记中插入txt文件(http://path.to.my.status.file/status.txt)的路径,则该方法不适合。创建另一个方法,以字符串形式返回文件的路径。然后你可以使用jQuery或你最喜欢的JS方法获取它并将它放在你的超链接元素的HREF属性中。

让我知道你的发现。