2017-01-03 27 views
0

Ich möchte Token zu Header für Webapi-Anfrage hinzufügen. wie kann ich das tun?Wie setze ich Header mit IHttpActionResult

das ist mein Beispielcode

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

       //here add these token to header 

       return ? 
      } 

Ihnen danken.

+0

Diese Frage in http://stackoverflow.com/questions/13487012/mvc-4-web-api-add-custom-response-http-header beantwortet wird . – Tadziokaz

Antwort

3
  1. Sie könnten ResponseMessageResult Klasse für diese Verwendung:

    public IHttpActionResult Authenticate(Login data) 
    { 
        var Token = "fdsf123546fskjhf-gsuyuhsh"; 
    
        var response = new HttpResponseMessage(); 
    
        response.Headers.Add("Authentication", Token); 
    
        return new ResponseMessageResult(response); 
    } 
    
  2. Oder Ihr eigenes Ergebnis Klasse erstellen:

    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)); 
    } 
    
  3. Oder einen Header, um alle vorhandenen IHttpActionResult Objekt hinzufügen, eine Erweiterung mit Methode:

    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; 
         } 
        } 
    } 
    
+0

Danke, ich versuche erste Lösung, aber ich möchte andere Daten mit dieser Antwort verbinden –

+0

@ShaikMatheen Dann könnten Sie die 3. Lösung für alle vorhandenen IHttpActionResult Objekt verwenden. –

+0

Ich habe oben Code geschrieben und es funktioniert gut, kann mir bitte sagen, ist es richtiger Weg zu tun? –

0

Dieser Code arbeitet mir

public IHttpActionResult Authenticate(Login data) 
      { 
         Status = "success"; 
         Message = "You have been Authenticated successfully"; 
         var Token = "fdsf123546fskjhf-gsuyuhsh"; 
         var Result = new { Status = Status, Message = Message }; 

         var Response = Request.CreateResponse(HttpStatusCode.OK, Result); 
         Response.Headers.Add("AccessToken", Token.AccessToken); 

         return ResponseMessage(Response); 
      } 
Verwandte Themen