【问题标题】:asp.net webapi / jquery : loading an xml streamasp.net webapi / jquery:加载 xml 流
【发布时间】:2013-07-17 16:05:50
【问题描述】:

我有一个 ASP.NET WebAPI 方法,它返回一个包含有效 XML 文档的字符串:

public class MessageController : ApiController
{
    private readonly MyContextProvider _contextProvider = new MyContextProvider();

    [HttpGet]
    public string Message()
    {
        Message m =  _contextProvider.Context.Messages.First();
        return m.XMLFile;
    }
}

我使用 jQuery 从客户端调用此方法:

$.ajax('http://localhost:16361/service/api/message/message/', {
contentType: 'text/xml',
type: 'GET'
}).done(function (e) {  });

'e' 包含 XML 字符串,但这不是我想要的。我想让浏览器处理响应并显示其通常的对话框来保存或打开 XML。显然我在这里遗漏了一些东西,但我不知道该怎么做......

【问题讨论】:

    标签: jquery xml asp.net-web-api


    【解决方案1】:

    看看这个问题here

    您可以在 WebApi 中通过设置消息内容的 content-disposition 来实现:

    [HttpGet]
    public HttpResponseMessage Message()
    {
        Message m = _contextProvider.Context.Messages.First();
        var message =  Request.CreateResponse(HttpStatusCode.OK, m);
        message.Content.Headers.Add("Content-Disposition","attachment; filename=\"some.xml\"");
        return message;
    }
    

    [HttpGet]
    public HttpResponseMessage Message()
    {
        Message m = _contextProvider.Context.Messages.First();
        var message = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(m, Encoding.UTF8, "application/xml")
            };
        message.Content.Headers.Add("Content-Disposition","attachment; filename=\"some.xml\"");
        return message;
    }
    

    【讨论】:

    • 我的 XML 存储在我的 Message 实体的字符串属性中。因此,我不持有 xml 文件,因此执行 filename=\"some.xml\" 将无法正常工作。我怎样才能根据我已经拥有的东西做类似的事情?
    • @Sam 不确定我明白。我的示例显示它使用您的字符串属性来制作 XML。名称“some.xml”只是告诉浏览器当用户获得另存为对话框时该文件的名称。 “some.xml”文件不需要实际存在(!)。
    • 对,这是个误会。第二种解决方案对我很有用!非常感谢您的帮助!
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多