Web Api,在响应中编写标题

时间:2018-10-25 03:17:56

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

我正在编写.net 6中的Web api,我从SQL Server获取数据并以json格式返回,我也想添加一些标头作为响应。除了包含连字符的标题以外,所有标题都可以正常工作。

var data = [data from database]
var response = Request.CreateResponse(HttpStatusCode.OK, data);
response.Headers.Add("transactionid", "working fine");
response.Headers.Add("requesttimestamp", "working fine);
response.Headers.Add("**last-modified**", "does not work");

我收到此错误

  

标题名称滥用。确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用。

response.Headers.Add("Accept", "application/json");
response.Headers.Add("Content-Type", "application/json; charset=utf-8");

但有相同的错误。

我也在编写一个客户端,并尝试在请求标头中添加类似的参数,但会收到不同的错误

  

值'15 / 10/2018 04:30:15 AM'的格式正确

var client=new HttpClient();
client.DefaultRequestHeaders.Add("if-last-modified", "15/10/2018 04:30:15 AM");

如果我删除连字符,它会正常工作。

更新:我通过更改此代码对其进行了修复

response.Content.Headers.TryAddWithoutValidation("last-modified", lastModified);

client.DefaultRequestHeaders.TryAddWithoutValidation("if-modified-since", "15/10/2018 04:30:15 AM");

1 个答案:

答案 0 :(得分:2)

尝试将其添加到响应内容的标题中。

response.Content.Headers.TryAddWithoutValidation("X-LAST-MODIFIED", "15/10/2018 04:30:15 AM");

请注意使用TryAddWithoutValidation来避免验证标题,我相信这是造成问题的原因。

对于请求也可以这样做

var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("X-LAST-MODIFIED", "15/10/2018 04:30:15 AM");