XMLの文字列があり、XMLドキュメントとして返す必要があります。デフォルトでは、これはtext/plain
のコンテンツタイプで返されます。コンテンツはレンダリングされますが、コンテンツタイプはapplication/xml
である必要があります。オプションRespectBrowserAcceptHeaderを有効にしました。これにより、オブジェクトが文字列の場合を除いて、オブジェクトがXMLとしてシリアル化され、正しいコンテンツタイプが設定されます。
[HttpGet]
public string Get()
{
return xmlString;
}
public static string xmlString = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<sample>
Hello World.
</sample>";
return Content(xmlString, "application/xml")
を実行することもできますが、ファイルシステムまたはDBにこのように保存されていない限り、これはおそらく最善の方法ではありません。
通常、アクションから返される強い型のクラスが必要であり、それらをxmlとしてシリアル化する必要があります。
また、acceptヘッダー(つまり、jsonまたはxml)に基づいてコンテンツを返すようにアクションに指示することもできますが、xmlの場合は、最初にxmlシリアライザーをiircに登録する必要があります。
services.AddMvc(...)
.AddXmlSerializerFormatters()
.AddXmlDataContractSerializerFormatters();
アクションに注釈を付けます
[Produces("application/json", "application/xml")]
public Task<IActionResult> Get()
{
User user = ...........;
return ObjectResult(user);
}
クライアントがAccept: application/xml
を送信すると、xmlが返され、クライアントがAccept: application/json
を送信すると、jsonが返されます。
XMLである文字列があり、それをXMLドキュメントとして返す必要がある場合は、 ContentResult を返します。
[HttpGet]
public ContentResult Get()
{
return new ContentResult
{
ContentType = "application/xml",
Content = xmlString,
StatusCode = 200
};
}
コントローラー
using Microsoft.AspNetCore.Mvc;
namespace MyXmlSample
{
[Route("xml")]
public class MyXmlController
{
public static string xmlString =
@"<?xml version=""1.0"" encoding=""UTF-8""?>
<sample>
Hello World.
</sample>";
[HttpGet]
public ContentResult Get()
{
return new ContentResult
{
ContentType = "application/xml",
Content = xmlString,
StatusCode = 200
};
}
}
}
スタートアップ
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace MyXmlSample
{
public class Program
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
}
public static void Main(string[] args)
{
var Host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Program>()
.Build();
Host.Run();
}
}
}
project.json
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.AspNetCore.Mvc.Core": "1.0.0-*",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*",
"Microsoft.NETCore.App": "1.0.0-rc2-*"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dnxcore50",
"portable-net45"
]
}
},
"runtimes": {
"win10-x64": {}
}
}
応答
HTTP/1.1 200 OK
Date: Sun, 17 Apr 2016 22:10:45 GMT
Content-Type: application/xml
Server: Kestrel
Content-Length: 75
<?xml version="1.0" encoding="UTF-8"?>
<sample>
Hello World.
</sample>
ここではGitHubにあります 適切な測定のために。 :)