从ASP.Net核心函数返回XML

时间:2019-01-09 18:06:16

标签: asp.net json xml asp.net-mvc aws-lambda

我有一个用ASP.net core v2.0和Visual Studio Community 2017编写和编译的aws lambda函数。我想做的是,每当有客户要求使用此函数时,在对该函数做了一些处理之后,最后,函数将XML返回给客户端。

我的功能是这样的:

public System.Xml.XmlDocument FunctionHandler(xmlRequestString input, ILambdaContext context)
{
//create xml response object
System.Xml.XmlDocument returnXML = new System.Xml.XmlDocument();

//fill my xml object
System.Xml.XmlNode rootNode = returnXML.CreateElement("ANSWER");
returnXML.AppendChild(rootNode);
System.Xml.XmlNode statusNode = returnXML.CreateElement("STATUS");
statusNode.InnerXml = "0";
rootNode.AppendChild(statusNode);
System.Xml.XmlElement rootresult = returnXML.DocumentElement;
System.Xml.XmlNode rootnode = rootresult.FirstChild;

//do something in the function which is not relevant to this question

//returning back my xml object to client
return returnXML;
}

因此,在理想情况下,函数应返回如下内容:

<ANSWER>
<STATUS>0</STATUS>
</ANSWER>

但是,当我使用curl从客户端向此函数发出请求时,响应似乎为空。此外,在命令行响应中,我看到了以下内容:

< HTTP/1.1 200 OK>
< Content-Type: application/json>
Content-Type: application/json>

我非常努力地强制该函数返回xml。为此,我做了两件事:

1。从AWS API网关开始:我将集成响应和方法响应中的所有内容都更改为application / xml……所以这对我根本不起作用!仍然在响应中看到那些application / json而不是xml。

2。我创建了一个名为Startup.cs的类,并向其中添加了以下代码:

 public class Startup
 {     
    public void ConfigureServices(IServiceCollection services)
    {
    services.AddMvc()
            .AddXmlSerializerFormatters()
            .AddXmlDataContractSerializerFormatters(); ;
    }

 }

为此,我在myproject.csproj中为标记添加了以下几行:

<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Version="1.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />

此外,根据论坛的建议,我还尝试将以下行添加到AddMvc(带有和不带有已添加的选项):

options.RespectBrowserAcceptHeader = true; // false by default

这种方法也行不通,但我仍然得到json作为内容类型和空结果。

抱歉,这似乎是一个基本问题,但我对此感到非常困惑。

有什么建议吗?

在此先感谢您的帮助。

0 个答案:

没有答案