C产品如何满足特定用户需求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计909个文字,预计阅读时间需要4分钟。
常见现象是客户端发送请求时指定了`Accept: application/json`,但接口最终返回XML或固定格式。根本原因并非头部未传递过来,而是因为ASP.NET Core默认未启用基于`Accept`头的内容协商(Content Negotiation),或者控制器中没有配置响应格式支持。
实操建议:
- 确保控制器继承
ControllerBase(不是Controller),并启用AddControllersAsServices()(.NET 5+ 可省略) - 在
Startup.ConfigureServices或Program.cs中显式注册格式器:services.AddControllers(options =><br> options.ReturnHttpNotAcceptable = true)<br>.AddXmlSerializerFormatters()<br>.AddJsonOptions();
-
Accept头值必须精确匹配格式器注册的 MIME 类型,比如application/xml才触发 XML 序列化,text/xml不会生效
FileResult 返回文件时 Accept 头失效
用 FileStreamResult、PhysicalFileResult 等直接返回二进制流时,内容协商机制完全绕过——框架不会检查 Accept,也不会重写 Content-Type。
本文共计909个文字,预计阅读时间需要4分钟。
常见现象是客户端发送请求时指定了`Accept: application/json`,但接口最终返回XML或固定格式。根本原因并非头部未传递过来,而是因为ASP.NET Core默认未启用基于`Accept`头的内容协商(Content Negotiation),或者控制器中没有配置响应格式支持。
实操建议:
- 确保控制器继承
ControllerBase(不是Controller),并启用AddControllersAsServices()(.NET 5+ 可省略) - 在
Startup.ConfigureServices或Program.cs中显式注册格式器:services.AddControllers(options =><br> options.ReturnHttpNotAcceptable = true)<br>.AddXmlSerializerFormatters()<br>.AddJsonOptions();
-
Accept头值必须精确匹配格式器注册的 MIME 类型,比如application/xml才触发 XML 序列化,text/xml不会生效
FileResult 返回文件时 Accept 头失效
用 FileStreamResult、PhysicalFileResult 等直接返回二进制流时,内容协商机制完全绕过——框架不会检查 Accept,也不会重写 Content-Type。

