如何使用IHttpActionResult设置标头

Sha*_*een 1 model-view-controller asp.net-mvc web-services

我想为webapi请求添加标头到标头.我怎样才能做到这一点 ?

这是我的示例代码

public IHttpActionResult Authenticate(Login data)
            {
                var Token = "fdsf123546fskjhf-gsuyuhsh";

                //here add these token to header

                return ?
            }
Run Code Online (Sandbox Code Playgroud)

谢谢.

And*_*toy 6

  1. 您可以使用ResponseMessageResult类:

    public IHttpActionResult Authenticate(Login data)
    {
        var Token = "fdsf123546fskjhf-gsuyuhsh";
    
        var response = new HttpResponseMessage();
    
        response.Headers.Add("Authentication", Token);
    
        return new ResponseMessageResult(response);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者创建自己的结果类:

    public class HeaderActionResult : IHttpActionResult
    {
        private Tuple<string, string> header;
    
        public HeaderActionResult(Tuple<string, string> header) 
        {
            this.header = header;
        }
    
        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
        {
            var response = new HttpResponseMessage();
    
            response.Headers.Add(header.Item1, header.Item2);
    
            return Task.FromResult<HttpResponseMessage>(response);
        }
    }
    
    public IHttpActionResult Authenticate(Login data)
    {
        var Token = "fdsf123546fskjhf-gsuyuhsh";
    
        return new HeaderActionResult(Tuple.Create("Authentication", Token));
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 或者使用扩展方法向任何现有的IHttpActionResult对象添加标头:

    public static class HttpActionResultExtensions
    {
        public static IHttpActionResult AddHeader(this IHttpActionResult actionResult, string name, string value)
        {
            return new HeaderActionResult(actionResult, name, value);
        }
    
        private class HeaderActionResult : IHttpActionResult
        {
            private readonly IHttpActionResult actionResult;
    
            private string name;
    
            private string value;
    
            public HeaderActionResult(IHttpActionResult actionResult, string name, string value)
            {
                this.actionResult = actionResult;
    
                this.name = name;
    
                this.value = value;
            }
    
            public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
            {
                HttpResponseMessage httpResponseMessage = await this.actionResult.ExecuteAsync(cancellationToken);
    
                httpResponseMessage.Headers.Add(this.name, this.value);
    
                return httpResponseMessage;
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)