您可以使用
AddUriPathExtensionMapping("json", "application/json");
启用将媒体类型指定为 uri 的一部分,如下所示
http://localhost/products.json
如何让 WebApi 允许我发布到此 uri 而无需指定 Content-Type 标头。我希望 WebApi 使用扩展来确定 Content-Type。
您可以使用
AddUriPathExtensionMapping("json", "application/json");
启用将媒体类型指定为 uri 的一部分,如下所示
http://localhost/products.json
如何让 WebApi 允许我发布到此 uri 而无需指定 Content-Type 标头。我希望 WebApi 使用扩展来确定 Content-Type。
问题:为什么要在 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 中,那么您会在使用.
url 中的字符时看到错误。您可以通过在 Web.Config 中进行以下设置来解决此问题:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
您可以添加一个服务器端消息处理程序来解析 URI 并在 Content-Type 标头到达 ApiController 之前设置它。