您可以使用
AddUriPathExtensionMapping("json", "application/json");
要启用媒体类型作为uri的一部分,如下所示
http://localhost/products.json
如何让WebApi允许我发布到此uri而无需指定Content-Type标头。我希望WebApi使用扩展来确定Content-Type。
答案 0 :(得分:2)
问题:您为什么要在Uri中指定Content-Type?通常在Uri中指定媒体类型用于GET类型的场景,并且用户无法提供Accept
标头。例如,在浏览器地址栏中,可以输入/products.json
或/products.xml
来查看结果。
对于您可以使用标头发出请求的所有其他方案,您应该以常规方式发送它们。你能更多地描述你的情景吗?
被修改:
如果您确实在寻找GET请求,那么您可以在以下示例中执行以下操作:
注册以下路线:
config.Routes.MapHttpRoute(
name: "DefaultApiWithExtension2",
routeTemplate: "api/{controller}/{id}.{ext}"
);
config.Routes.MapHttpRoute(
name: "DefaultApiWithExtension1",
routeTemplate: "api/{controller}.{ext}");
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "application/xml");
config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json");
如果您的应用程序托管在IIS中,那么您会在使用网址中的.
字符时看到错误。您可以通过在Web.Config中进行以下设置来解决此问题:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
答案 1 :(得分:0)
您可以添加一个服务器端消息处理程序,该处理程序解析URI并在到达ApiController之前设置Content-Type标头。