我正在尝试使用MVC根据HTTP调用WebApi方法。我需要每次都发送一些信息,比如userID和app版本。如何将此信息添加到标题中?我希望将其作为ajax调用,而不是像现在这样的客户端代码):
'beforeSend: function (req) {
req.setRequestHeader("Accept", "version=1.00,requestTime=" + new Date());
}'
但是在服务器端,我无法使用字符串设置RequestHeader 这是我的服务器代码:
HttpClient client = new HttpClient();
var request = new HttpRequestMessage()
{
RequestUri = new Uri("http://localhost/WebAPIDemo/FilterAttribute-MVC"),
Method = HttpMethod.Get,
};
request.Headers.Accept.Add(***);
//request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
List<OfficeSupply> os=new List<OfficeSupply>();
var task = client.SendAsync(request)
.ContinueWith((taskwithmsg) =>
{
var response = taskwithmsg.Result;
var jsonTask = response.Content.ReadAsAsync<List<OfficeSupply>>();
jsonTask.Wait();
var jsonObject = jsonTask.Result;
os = jsonObject.ToList();
});
task.Wait();
***
需要是'MediaTypeWithQualityHeaderValue'类型值,但我只想将其设置为自定义,如ajax调用。我该怎么办?
另外,我想更改Header Authorization参数,但是这段代码:
'client.DefaultRequestHeaders.Add("Authorization", "12345");'
无法正常工作
request.Headers.Authorization.Parameter
告诉我它是只读的。
如何在发送之前在服务器端设置它?
答案 0 :(得分:2)
您可以通过执行类似
的操作来指定自定义身份验证方案httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("scheme","whatever parameters");
您可以使用以下代码设置完全自定义标头:
request.Headers.TryAddWithoutValidation("foo", new List<string>() {"sdadads"});
但请注意,上面显示的接受标题示例完全无效。关于如何格式化接受标题的内容并且您的示例无效,有非常精确的规则。
答案 1 :(得分:0)
我曾经按照以下方法设置请求标头。如果适合你,请试试。
[脚本]
$("#Grid1").ajaxSuccess(function (evt, request, settings) {
$('.Status').html(request.getResponseHeader("Status"));
});
[查看]
<h2>Status:</h2><h2 class="Status" style="color:Red;">
[控制器]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(Order orders)
{
string status = string.Empty;
if (orders != null)
{
OrderRepository.Update(orders);
status = "Updated";
}
Response.AddHeader("Status", status);
return data.GridActions<EditableOrder>();
}