1

您可以使用

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

启用将媒体类型指定为 uri 的一部分,如下所示

http://localhost/products.json

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

4

2 回答 2

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 中,那么您会在使用.url 中的字符时看到错误。您可以通过在 Web.Config 中进行以下设置来解决此问题:
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />

于 2013-06-13T00:14:30.987 回答
0

您可以添加一个服务器端消息处理程序来解析 URI 并在 Content-Type 标头到达 ApiController 之前设置它。

于 2013-06-13T03:08:08.997 回答