C# 是否有必要为内容设置内容类型头,就像对web api的PUT/POST请求中的请求头一样

C# 是否有必要为内容设置内容类型头,就像对web api的PUT/POST请求中的请求头一样,c#,asp.net-web-api,dotnet-httpclient,C#,Asp.net Web Api,Dotnet Httpclient,我对web api还不熟悉,并编写了一段代码,在这里我将json数据发送到web api(web服务)的PUT/POST请求。 我正在做下面的事情 using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:9000/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHe

我对web api还不熟悉,并编写了一段代码,在这里我将json数据发送到web api(web服务)的PUT/POST请求。 我正在做下面的事情

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);
}
我的问题是,我是否必须将内容类型的代码放在内容头上?,并且我观察到,即使在我的代码中只包含内容类型的“applicationpn/json”内容类型 在Fiddler中检查我的请求,它仍然显示内容类型:text/html这是为什么?
非常感谢您的所有回复

是的,您确实为内容类型添加了代码。JSON中不必包含的部分是accepts,尽管我个人认为最好包含accepts,因为它明确说明了意图,但您的里程可能会有所不同

这是我刚刚发现的一篇博客文章,解释了不这样做的一些问题:

编辑:


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

事实上,我在寻找我问题的答案时确实看到了这篇文章,问题是如果深入到这篇文章的底部,人们发表了他们的评论,这篇文章最初是在2012年9月写的,然后是他评论中的一个家伙(写于2013年12月)说代码中不再需要给出内容类型,可能是因为web api在一年内取得了进步。即从2102年9月到2013年12月。@user2913184-这很好。一般来说,我仍然喜欢显式编码,因为它会减少惊喜。我已经更新了上面的代码,所以在包含内容类型之后唯一的例外是,我仍然收到相同的旧错误和“响应”对象表示不允许使用错误代码405方法。@user2913184-您在Fiddler中检查过请求和响应吗?我对REST端点执行此操作,因为您在其他方面几乎没有反馈。运行查询,然后遍历请求以确保它没有遗漏任何内容。我还将检查另一端(服务)为了确保没有错误地设置配置元素。当我碰壁时,我经常会找到一个有效的示例,然后根据我的代码进行裁剪。事后,我将有效的代码与我原来的代码进行比较,这样我就可以理解哪里出了错。我得到的第二个惊喜是,当我分析对web api的调用时.Fiddler说这是一个PUT请求,尽管我在上面的代码中专门定义了HttpMethod.Post。