如何将此IHttpActionResult转换为ASP.NET Core IActionResult

时间:2018-03-18 12:55:37

标签: c# asp.net-core

我有一个ExecuteAsync&#34; old&#34; ASP.NET,具有 public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var response = _value == null ? _request.CreateResponse(StatusCode) : _request.CreateResponse(StatusCode, _value); if (_uri != null) { var relativeUri = new Uri(_uri.PathAndQuery, UriKind.Relative); response.Headers.Location = relativeUri; } return Task.FromResult(response); } 的以下代码:

IActionResult

现在,要将其转换为ASP.NET Core public async Task ExecuteResultAsync(ActionContext context) ,我意识到我需要将签名更改为

_value

我有两个具体的需求:

  1. 如果_uri不为空,请将其作为回复正文发回;和
  2. 如果Location不为空,请将其发送回响应的context标题。
  3. 我发现了许多类似的问题,例如this,建议操纵Response的{​​{1}}财产 - 但这并不能回答如何设置object(而不是字符串)或this的正文,建议使用ObjectResponse,但我不清楚如何添加所需的标题。

    你是怎么做到的?

1 个答案:

答案 0 :(得分:2)

是的,你绝对可以在这种情况下使用ObjectResponse

关于标题:在ExecuteResultAsync方法中,您可以通过context.HttpContext.Response属性直接修改响应,所以请执行以下操作:

public async Task ExecuteResultAsync(ActionContext context)
{
    // note: ObjectResult allows to pass null in ctor
    var objectResult = new ObjectResult(_value)
    {
        StatusCode = <needed status_code>
    };

    context.HttpContext.Response.Headers["Location"] = "<your relativeUri>";

    await objectResult.ExecuteResultAsync(context);
}