【问题标题】:Using mvc 4 how do you get xml back from a get request?使用 mvc 4 如何从获取请求中获取 xml?
【发布时间】:2012-06-20 21:15:23
【问题描述】:

当我使用浏览器访问页面时,它是 xml,但当我请求 url 时,它是 json。 mvc 4 api中是否有一些东西使它只输出json到通过程序的请求,或者我可以取回xml。注意:这发生在桌面应用程序和网页中,因此它必须是某种设置,这是桌面给我的错误:Data at the root level is invalid. Line 1, position 1. 是的,我正在正确加载文档,我检查了值改用 json 就可以了。

 private void Plus_Click(object sender, EventArgs e)
        {
            string FValue = id.Text;
            string SValue = id2.Text;
            string ending;
            string url = "http://localhost:56254/api/add?id=" + FValue + "&id2=" + SValue;
            XmlDocument xdoc = new XmlDocument();

            xdoc.Load(url);

            XmlNode xNode = xdoc.SelectSingleNode("End");
            ending = xNode.InnerText;
            Answer.Text = ending;
        }

这是我的桌面应用程序代码。 我获取 xml 的代码就在这里:

namespace Calculator.Controllers
{
    using Calculator.Models;
    public class AddController : ApiController
    {

        public Calcs GetAddition(int id, int id2)
        {
           double end = id + id2;
            Calcs[] calcs = new Calcs[] { new Calcs { FValue = id, SValue = id2, End = end } };
            return calcs[0];
        }
    }
}

这是计算:

namespace Calculator.Models

    {
        public class Calcs
        {
            public int FValue { get; set; }
            public int SValue { get; set; }
            public double End { get; set; }
        }
    }

这是浏览器输出的内容:

<Calcs xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Calculator.Models">
<End>60</End>
<FValue>55</FValue>
<SValue>5</SValue>
</Calcs>

【问题讨论】:

  • 不是代码问题,是设置问题...

标签: c# xml asp.net-web-api


【解决方案1】:

您需要在请求中设置接受标头类型。但是,由于您忽略了提供足够的信息来了解您是如何请求数据的,所以我只能为您提供帮助。\

编辑:

这里的问题是 XmlDocument.Load 没有发送包含接受格式的 xml 的接受标头(真的有点愚蠢,有人会认为它会)。

您可能必须使用 WebRequest 来检索文档,并指定一个指示“application/xml;q=0.9”的接受标头。

您可以在这里找到解决方案:C# Won't Load A Certain XML, But Works in Browser

【讨论】:

  • @wizage - 这是最简单的方法。这是几行代码。您唯一的其他解决方案是重写您的操作方法以显式返回 XML,方法是为 XmlResult 类型安装 MVC Contrib 或手动格式化 XML。
  • @wizage - 我刚刚注意到您正在使用 WebAPI,这在您的帖子中并不清楚,而且您的标签也搞砸了。 WebAPI 旨在通过接受标头返回您请求的类型。这就是它的用途。没有“更简单的方法”,只有几行代码。
  • 该死的太糟糕了......他们为什么要编写如此可怕的代码。谢谢!
  • @wizage - 他们没有。它旨在让您以任何您想要的格式获取数据。请求者要求格式。阅读:weblogs.asp.net/gunnarpeipman/archive/2012/04/19/…
  • 如果您使用的是 .NET 4,您应该使用新的 HttpClient 而不是 WebRequest。
猜你喜欢
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2019-03-02
  • 2015-07-19
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多