web-dev-qa-db-ja.com

ASP.NET CoreがXML結果を返すようにする方法は?

[HttpGet]
[HttpPost]
public HttpResponseMessage GetXml(string value)
{
    var xml = $"<result><value>{value}</value></result>";
    return new HttpResponseMessage
   {
       Content = new StringContent(xml, Encoding.UTF8, "application/xml")
   };
}

Swaggerを使用してアクションを呼び出し、このパラメーター「テキスト値」を渡しました

期待される結果は次のようなXMLファイルである必要があります:テキスト値

実際の結果:渡された値のない奇妙なjson結果! https://www.screencast.com/t/uzcEed7ojLe

次の解決策を試しましたが、うまくいきませんでした。

services.AddMvc().AddXmlDataContractSerializerFormatters();
services.AddMvc().AddXmlSerializerFormatters();
4
narouz
  1. 属性にパラメーターがありません。
  2. どのタイプの出力フォーマットを宣言するためにプロデュース属性を置くことができます
  3. iActionResultを採用するか、直接ContentResultを返すことができます。

    [HttpGet("{value}")]
    [Produces("application/xml")]
    public IActionResult GetXml(string value)
    {
        var xml = $"<result><value>{value}</value></result>";
        //HttpResponseMessage response = new HttpResponseMessage();
        //response.Content = new StringContent(xml, Encoding.UTF8);
        //return response;
    
        return new ContentResult{
            ContentType = "application/xml",
            Content = xml,
            StatusCode = 200
        };
    }
    

上記はあなたに与えます

<result>
    <value>hello</value>
</result>

iActionResultの詳細については、次のリンクを参照してください

WEB APIアクションメソッドの戻り値の型は何ですか?

0
phonemyatt

ASP.NETコア2+の場合、 XmlDataContractSerializerOutputFormatter を構成する必要があります。これは Nuget から見つけることができます。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(c =>
    {
        c.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
    });
}
0
Salah Akbari