2015-12-05 6 views
1

Я использую IHttpActionResult Type для API вызова, который Get вызова, и я хочу, чтобы отправить заголовок ответа в одном вызове выше моего кодIHttpActionResult WEB API заголовок ответа

[HttpGet] 
    public IHttpActionResult GetSyncData() 
    { 
     syncDataRepository.Location = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.Location); 
     syncDataRepository.UserLocation = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.UserLocation); 
     syncDataRepository.UserAuthentication = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.UserAuthentication); 
     syncDataRepository.UserDetails = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.UserDetails); 
     syncDataRepository.TourOrganization = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.TourOrganization); 
     syncDataRepository.TourBatch = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.TourBatch); 
     syncDataRepository.TourSuperBatch = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.TourSuperBatch); 
     syncDataRepository.TourPlanItemChat = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.TourPlanItemChat); 
     syncDataRepository.TourBatchPlan = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.TourBatchPlan); 
     syncDataRepository.MyRole = JsonConvert.SerializeObject(Roles.GetRolesForUser(HttpContext.Current.User.Identity.Name)); 
     syncDataRepository.DeletedBatchPlan = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.DeletedBatchPlan); 
     syncDataRepository.Mode = JsonConvert.SerializeObject(SyncDataOfMobileDatatSet.Mode); 
     string jsonData = JsonConvert.SerializeObject(syncDataRepository); 

     return Json(syncDataRepository); 
    } 

я попытался с HttpContext.Response но Я получаю его как null. так что есть ли другой способ, пожалуйста, помогите мне.

Thank you.

+0

Извините, его непонятно, что вы хотели бы сделать. Вы хотите установить некоторые заголовки ответов? Если да, то какие и какие значения? – swestner

+0

yes Я хочу отправить ответный заголовок, который будет содержать одно значение datetime. – Liquid

ответ

0

Вы можете установить заголовок ответа, реализовав IHttpActionResult и установки заголовка в методе ExecuteAsync следующим образом:

public class DateHeaderActionResult<TContent> : IHttpActionResult 
{ 
    private DateTime _date; 
    private TContent _content; 
    private HttpRequestMessage _request; 

    public DateHeaderActionResult(DateTime date, TContent content, HttpRequestMessage request) 
    { 
    _date = date; 
    _content = content; 
    _request = request; 
    } 

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
    { 
    var response = _request.CreateResponse(HttpStatusCode.OK); 
    response.Headers.Add("MyDate", _date.ToString("yyyyMMddThhmmss")); 
    response.Content = new ObjectContent<TContent>(_content, new JsonMediaTypeFormatter()); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

    return Task.FromResult(response); 
    } 
} 

, а затем в контроллере вместо возвращения

return Json(syncDataRepository); 

Вы бы вернуться

return new DateHeaderActionResult<SyncDataRepository>(DateTime.Now, syncDataRepository, Request); 

Это предполагается, что syncDataRepository cla ss name - SyncDataRepository