【发布时间】:2014-06-15 12:20:58
【问题描述】:
我的 config.Routes 设置为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
有了这个我可以使用:
-
localhost:port/api/products- 获取完整的产品列表 -
localhost:port/api/products/#- 获取具有给定 id 的单个产品
基于浏览器,我得到了不同的格式(FireFox 和 Google Chrome 中默认为 XML 格式,Internet Explorer 中为 JSON)。
我主要需要JSON,所以一开始我添加了:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
所以我的回复总是 JSON 格式。
此时一切都按预期进行,我收到了对上述两个 GET 请求的 JSON 格式响应。
然后我偶然发现了this stackoverflow post。 认为根据 GET 请求为自己选择要返回的格式是一个不错的功能。
但是,当我将上面提到的 config.Routes 和 JSON 代码替换为:
config.Routes.MapHttpRoute(
name: "API UriPathExtentsion",
routeTemplate: "api/{controller}.{ext}/{id}",
defaults: new { id = RouteParameter.Optional, ext = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "API UriPathExtension ID",
routeTemplate: "api/{controller}/{id}.{ext}",
defaults: new { id = RouteParameter.Optional, ext = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json");
config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "text/xml");
我收到以下 404 错误:
在localhost:post/api/products:
在localhost:port/api/products.xml 上:
有谁知道可能出了什么问题?
另外,我不确定第二段代码是否会完全按照我的意愿执行,所以这里是示例请求列表以及我希望它返回的内容:
-
localhost:port\api\products- 获取默认浏览器格式的产品列表 -
localhost:port\api\products\#- 获取默认浏览器格式的单个产品 -
localhost:port\api\products.xml- 获取 XML 格式的产品列表 -
localhost:port\api\products.json- 获取 JSON 格式的产品列表 -
localhost:port\api\products\#.xml- 获取 XML 格式的单个产品 -
localhost:port\api\products\#.json- 获取 JSON 格式的单个产品
提前感谢您的回复。
编辑 1:在评论后将 exten 更改为 ext。还是一样的错误..
【问题讨论】:
-
您链接到的帖子中的答案包括this comment...这有帮助吗?
-
@DaveParsons 不是真的,因为我已经使用
exten而不是extension,如我的主帖代码所示。 -
评论说使用
{ext}而不是{exten}。 -
@DaveParsons 我现在已将其更改为
{ext},但仍然是相同的错误.. -
另外,从您的链接帖子中:请记住,在此示例中,您仍然必须使用适当的内容类型发出请求。您这样做了吗?
标签: c# xml json httpresponse formatter