1

我正在尝试使用 MVC 根据 HTTP 调用 WebApi 方法。我每次都需要发送一些信息,比如用户 ID 和应用程序版本。如何将此信息添加到标题中?我想作为一个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

告诉我它是只读的。

发送前如何在服务器端设置?

4

2 回答 2

2

您可以通过执行以下操作来指定自定义身份验证方案,

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("scheme","whatever parameters");

您可以使用如下代码设置完全自定义的标头:

request.Headers.TryAddWithoutValidation("foo", new List<string>() {"sdadads"});

但请注意,您上面显示的接受标头示例完全无效。关于如何格式化接受标头的内容有非常精确的规则,并且您的示例无效。

于 2012-12-18T02:36:12.130 回答
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>();
    }

响应头

于 2012-12-18T04:41:19.167 回答