【发布时间】: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