【问题标题】:setValue:@"application/json" forHTTPHeaderField:@"Content­-Type" Not WorkingsetValue:@"application/json" forHTTPHeaderField:@"Content-Type" 不工作
【发布时间】:2025-11-27 23:05:02
【问题描述】:

其实很简单:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:linkURLString]];
[request setHTTPMethod:@"POST"];
[request setTimeoutInterval:10];
[request setValue:@"application/json" forHTTPHeaderField:@"Content­-Type"];
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:jsonDictionary options:NSJSONWritingPrettyPrinted error:nil]];

如果我记录标题 @"Content­-Type" 的值,我得到了 nil。这就是我在后端得到的。设置了所有其他值,甚至尝试了其他标题字段,工作正常!我尝试在标题之前设置正文,但仍然为零。

【问题讨论】:

  • 我不明白为什么不应该实际设置 Content-Type 标头。你确定请求对象没有被释放或类似的东西吗?
  • 未发布,其他参数正常。
  • 找到解决方案的最简单方法可能是在 Github 上建立一个 POC 项目,以便我们可以重现您的问题。
  • 说真的,@ValerioSantinelli? Github 上用于设置 URL 请求内容类型的 POC :) ?
  • :) 老实说,我真的找不到很好的理由说明为什么该代码不能正常工作

标签: ios nsurlconnection nsmutableurlrequest


【解决方案1】:

我尝试复制并粘贴您的代码,我也获得了(null)

通过打印所有HTTPHeaderFields ([request allHTTPHeaderFields]) 的列表,我得到了:

Content-Type: {
    "Content\U00ad-Type" = "application/json";
}

如您所见,有一个奇怪的 Unicode 字符:\U00ad。 这就是为什么当您尝试获取与Content-Type 关联的值时,它会找到null

所以我尝试在你的代码中重新定位字符串@"Content-Type",结果是:

Content-Type: {
    "Content-Type" = "application/json";
}

现在确实是日志记录:

NSLog(@"Content-Type: %@", [request valueForHTTPHeaderField:@"Content-Type"]);

我得到了:

Content-Type: application/json

【讨论】:

  • 首先感谢您编辑帖子并使代码缩进。其次,修复错误的聪明思维。我正在从 PDF 文件中复制 Content-Type 标头字段。没注意,贴错了编码。
  • 尽可能避免“复制”->“粘贴”:)