WebApi - 在Uri中指定Content-Type

时间:2013-06-12 23:53:03

标签: asp.net-web-api

您可以使用

AddUriPathExtensionMapping("json", "application/json");

要启用媒体类型作为uri的一部分,如下所示

http://localhost/products.json

如何让WebApi允许我发布到此uri而无需指定Content-Type标头。我希望WebApi使用扩展来确定Content-Type。

2 个答案:

答案 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标头。