我正在编写.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");
答案 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");