ApiController获取方法响应标头

时间:2012-10-11 15:16:40

标签: c# asp.net-mvc asp.net-web-api

说我有一个ApiController,方法如下:

[HttpGet]
IEnumerable<MyType> GetSomeOfMyType( )
{
    return new MyType[ 10 ];
}

我想修改其中一个响应标头,我将如何转换此方法以允许它?

我猜我需要手动创建一个响应并将我的数据序列化,但是如何?

感谢。

3 个答案:

答案 0 :(得分:4)

您应该像下面的代码一样返回IEnumerable,而不是返回HttpResponseMessage,然后您可以修改其Headers

[HttpGet]
public HttpResponseMessage GetSomeOfMyType( )
{
    var response = Request.CreateResponse(HttpStatusCode.OK, new MyType[10]);

    //Access to header: response.Headers       

    return response;
}

答案 1 :(得分:0)

以下是asp.net的示例:

public HttpResponseMessage PostProduct(Product item)
{
    item = repository.Add(item);
    var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item);

    string uri = Url.Link("DefaultApi", new { id = item.Id });
    response.Headers.Location = new Uri(uri);
    return response;
}

答案 2 :(得分:-1)

[HttpGet]
ActionResult GetSomeOfMyType( )
{
    ...
    HttpContext.Response.AppendHeader("your_header_name", "your_header_value");
    ...

    return Json(new MyType[ 10 ]);
}

假设您正在使用JSON进行序列化。否则,您可以使用ContentResult类和自定义序列化函数,如下所示:

[HttpGet]
ActionResult GetSomeOfMyType( )
{
    ...
    HttpContext.Response.AppendHeader("your_header_name", "your_header_value");
    ...

    return new ContentResult { 
        Content = YourSerializationFunction(new MyType[ 10 ]), 
        ContentEncoding = your_encoding, // optional
        ContentType = "your_content_type" // optional
    };
}