我正在使用ASP.NET WebApi来创建RESTful API。我正在我的一个控制器中创建一个PUT方法,代码如下所示:
public HttpResponseMessage Put(int idAssessment, int idCaseStudy, string value) {
var response = Request.CreateResponse();
if (!response.Headers.Contains("Content-Type")) {
response.Headers.Add("Content-Type", "text/plain");
}
response.StatusCode = HttpStatusCode.OK;
return response;
}
当我通过AJAX将浏览器推送到该位置时,它给了我这个例外:
未使用的标题名称。确保使用请求标头 HttpRequestMessage,带有HttpResponseMessage的响应头,以及 带有HttpContent对象的内容标题。
但Content-Type
不是一个完全有效的回复标题吗?为什么我得到这个例外?
答案 0 :(得分:106)
查看HttpContentHeaders.ContentType Property:
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
if (response.Content == null)
{
response.Content = new StringContent("");
// The media type for the StringContent created defaults to text/plain.
}
答案 1 :(得分:0)
ASP Web API中缺少某些内容:EmptyContent
类型。它将允许发送一个空的正文,同时仍允许所有特定于内容的标头。
将下面的类放在代码中:
public class EmptyContent : HttpContent
{
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
return Task.CompletedTask;
}
protected override bool TryComputeLength(out long length)
{
length = 0L;
return true;
}
}
然后根据需要使用它。现在,您有了一个用于附加标题的内容对象。
response.Content = new EmptyContent();
response.Content.Headers.LastModified = file.DateUpdatedUtc;
为什么使用EmptyContent
代替new StringContent(string.Empty)
?
StringContent
是一个繁重的类,它执行许多代码(因为它继承了ByteArrayContent
)
StringContent
将添加一个额外的无用/有问题的标头:Content-Type: plain/text; charset=...