是否有必要为内容提供内容类型标头,就像对Web api的PUT / POST请求中的请求标头一样

时间:2014-05-14 02:05:14

标签: c# asp.net-web-api dotnet-httpclient

我是web api的新手并编写代码,我在json数据中发送一个PUT / POST请求到web api(Web服务)。 我正在做以下

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:9000/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var gizmo = some json data;
    HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post,"url");
    req.Content = new StringContent(some json data, Encoding.UTF8,"application/json"));
    client.Timeout = TimeSpan.FromSeconds(500);
    response = await client.PostAsJsonAsync("api/products", gizmo);
}

我的问题是我是否必须为内容标题设置内容类型的代码?我观察到即使包含内容类型为“applicatipn / json”专门用于我的代码中的内容类型 并在Fiddler中查看我的请求,它仍然显示内容类型:text / html。 为什么?。 您的所有回复都将受到高度赞赏

1 个答案:

答案 0 :(得分:0)

是的,您确实为内容类型添加了代码。虽然我个人觉得包括接受更好,因为它明确说明意图,但你的里程可能会有所不同。

以下是我发现的一篇博文,解释了一些不执行此操作的问题: http://truncatedcodr.wordpress.com/2012/09/05/asp-net-web-api-always-set-content-type/

编辑:

见评论。显然,您不必再指定内容类型。无论如何,至少在大多数企业软件中,显式编码优于隐式编码。原因很简单:当您使用隐式编码时,代码的意图通常会丢失。请注意,我并没有说"不使用可用的抽象",因为允许Microsoft(或开源开发团队)接管应用程序的管道并使用没有任何问题他们提供的抽象简化和减少您的代码。如果您依赖于默认值,而不是设置值,则会产生一些未来风险,应该考虑这一点。在某些情况下,值得冒风险。今天的趋势是尽可能地使用隐式编码,因为它可以节省击键次数。作为一名顾问,我可以证明这往往是未来问题的核心。