2012-12-18 45 views
1

我想根据HTTP使用MVC调用WebApi方法。我需要每次发送一些信息,例如用户ID和应用程序版本。我怎样才能将这个信息添加到头部?我想这样做,作为一个Ajax调用,而不是由客户端代码就像现在):如何在服务器端设置WebApi请求标头

 '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调用一样。我应该怎么做?

另外,我想改变页眉授权参数,但是这个代码:

'client.DefaultRequestHeaders.Add("Authorization", "12345");' 

没有工作,

request.Headers.Authorization.Parameter 

告诉我,这是只读的。

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

回答

1

你可以做这样的事情指定自定义的身份验证方案,

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

您可以设置这样的代码完全自定义标题:

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

不过要小心,在接受头示例你上面显示的是完全无效的。关于如何格式化接受标题的内容以及您的示例无效,有非常准确的规则。

+0

你好!我想你的代码,但它不不会显示在Chrome请求标题(F12网络标题),一切都没有改变 – Ray

+0

如果Chrome请求来自httpClient请求,Chrome将如何看到请求?使用提琴手查看请求。 –

+0

提琴手请求标头只有:四个接受参数和一个用户代理? – Ray

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>(); 
    } 

Response header

+0

对不起,我想设置请求头,而不是响应,并为webapi,我需要使用HttpClient和HttpRequestMessage发送请求,我只是不知道如何正确设置对象的属性,顺便说一句,你是哪个工具用于获取标题?浏览器? – Ray

+0

它是Firefox浏览器中的'firebug'开发人员插件。 – RGR

+0

@Ray您不需要使用HttpClient调用Web API,您可以使用任何可以发出http请求的软件。 –