2012-12-18 2 views
1

MVC를 사용하여 HTTP에 따라 WebApi 메서드를 호출하려고합니다. 사용자 ID 및 앱 버전과 같은 정보를 매번 보내야합니다. 헤더에이 정보를 어떻게 추가 할 수 있습니까? 서버 쪽에서 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

안녕! 난 당신의 코드를 해봤지만 아무튼 크롬 요청 헤더에 표시하지 않음 (F12 네트워크 헤더), 모든 것이 변경되지 않았습니다. – Ray

+0

httpClient 요청에서 Chrome이 요청을 볼 수있는 방법은 무엇입니까? 요청을 보려면 피들러를 사용하십시오. –

+0

피 들러 요청 헤더는 다음을 포함합니다 : 4 개의 accept param과 user agent? – 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

파이어 폭스 브라우저에서 '파이어 버그'개발자 추가 기능입니다. – RGR

+0

@Ray HttpClient를 사용하여 웹 API를 호출 할 필요가 없으므로 http 요청을 할 수있는 모든 소프트웨어를 사용할 수 있습니다. –

관련 문제