【问题标题】:IHttpActionResult WEB API Response HeaderIHttpActionResult WEB API 响应标头
【发布时间】:2015-12-09 11:10:33
【问题描述】:

我正在使用IHttpActionResult API 调用类型,即Get 调用,我想在上面的同一个调用中发送响应标头是我的代码

[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,但我认为它为空。那么有没有其他方法请帮助我。

谢谢。

【问题讨论】:

  • 抱歉,不清楚您想做什么。你想设置一些响应头吗?如果是,是哪些,价值是多少?
  • 是的,我想发送包含一个日期时间值的响应标头。

标签: asp.net-web-api2 asp.net-web-api


【解决方案1】:

您可以通过实现 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 类名是 SyncDataRepository

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多