【问题标题】:Return either xml or json from MVC web api based on request returns 404 error根据请求从 MVC Web api 返回 xml 或 json 返回 404 错误
【发布时间】:2020-05-03 02:34:02
【问题描述】:

使用 URLhttp://localhost/api/Student 我得到一个 XML 格式的学生列表。

我想做的是可以选择根据请求返回 json 或 xml。所以对于 json,它会是;

http://localhost/api/Student.json

对于 XML,它会是;

http://localhost/api/Student.xml

同样;

http://localhost/api/Student.json/1/
http://localhost/api/Student.xml/1/

我已经在我的WebApiConfig.cs 文件中实现了这一点。

 StructuremapWebApi.Start();


 config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json");
 config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "text/xml");
 // Web API routes
 config.MapHttpAttributeRoutes();

 config.Routes.MapHttpRoute(
 name: "DefaultApi",
 routeTemplate: "api/{controller}/{id}",
 defaults: new { id = RouteParameter.Optional }
 );

 config.Routes.MapHttpRoute(
 name: "Api UriPathExtension ID",
 routeTemplate: "api/{controller}/{id}.{ext}",
 defaults: new { id = RouteParameter.Optional, extension = 
 RouteParameter.Optional }
 );

 config.Routes.MapHttpRoute(
 name: "Api UriPathExtension",
 routeTemplate: "api/{controller}.{extension}/{id}",
 defaults: new { id = RouteParameter.Optional, extension = 
 RouteParameter.Optional }
 );

一旦我调用带有扩展名的链接之一,它就会返回HTTP Error 404.0 - Not Found

我错过了什么吗?请帮忙。

【问题讨论】:

  • 控制器或参数的分机,我想一定是这样的:api/{controller}.{ext}/{id}
  • 已实现但不起作用,仍然返回 404
  • API 不应在 url 中使用扩展名。您可以在 API url 中有一个参数来指示返回哪种格式,也可以在请求中发送 Accept 标头来决定返回哪种格式。

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


【解决方案1】:

我不是 dotnet 开发人员,但我的猜测是 AddUriPathExtensionMapping 没有做你认为它正在做的事情。我假设您的路线没有像您认为的那样使用 .json.xml 文件类型注册,这就是您获得 404 的原因。

因此,您要么必须弄清楚如何以正确的方式添加所需的模式匹配,要么采取其他方法。

通常,API 支持多种格式的方式是通过 HTTP 标头。

对于 JSON,客户端将发送标头:

Content-Type: application/json
Accepts: application/json

对于 XML,通常是这样的:

Content-Type: application/json
Accepts: application/xml

假设您在发送 POST、PUT 或 PATCH 时仍希望向 API 发送 JSON 正文,但只是希望接收 XML 格式的响应。如果您想通过 XML 发送,那么您可以将 Content-Type 更改为 application/xml

当然,您必须自己在服务器端支持这些标头,通常通过添加将响应和请求序列化为您需要的格式的中间件。

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 2014-01-14
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多