web-dev-qa-db-fra.com

HttpActionContext.Request n'a pas de méth CreateResponse

J'essaie de créer un AuthorizeAttribute personnalisé dans l'API Web ASP.Net pour gérer l'authentification de base. Lors de la substitution de HandleUnauthorizedRequest, je trouve que HttpActionContext.Request n'a pas de méthode CreateResponse.

Le projet est MVC 4 ciblant .net 4.5. J'ai mis à jour l'API Web vers la version 2 à l'aide de nuget.


using System;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Web.Http;

namespace BasicAuth.Security
{
    public class BasicAuthAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
            {
                return;
            }

            var authHeader = actionContext.Request.Headers.Authorization;
            if (authHeader != null)
            {
                if (authHeader.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrWhiteSpace(authHeader.Parameter))
                {
                    var credentials = GetCredentials(authHeader);

                    //Handle authentication

                    return;
                }
            }

          HandleUnauthorizedRequest(actionContext);
        }

        private string[] GetCredentials(AuthenticationHeaderValue authHeader)
        {
            var raw = authHeader.Parameter;
            var encoding = Encoding.ASCII;
            var credentials = encoding.GetString(Convert.FromBase64String(raw));

            return credentials.Split(':');
        }

        protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            actionContext.Response = actionContext.Request. //No CreateResponse Method ?
        }
    }
}

Je suis sûr que ce doit être une référence manquante ou incorrecte quelque part, mais c'est plutôt déroutant. Toute aide serait très appréciée.

Merci

29
zybroxz

CreateResponse est une méthode d'extension définie dans le System.Net.Http espace de noms. Assurez-vous donc de l'avoir inclus dans la portée en ajoutant la directive using correcte:

using System.Net.Http;
49
Darin Dimitrov

Piggy soutient ce post

Dans un projet après une fusion et une mise à niveau vers le dernier .net 4.6, nous avons eu une erreur connexe et ce fut l'un des premiers messages trouvés.

Symptôme: "Aucune surcharge pour la méthode 'Request.CreateResponse ()' ne prend 0 argument".

Problème: System.Net.Http.Formating manquait dans les références à l'origine de l'erreur

Lösung: Request.CreateResponse () appartient à HttpRequestMessageExtensions vivant dans le paquet de nuget Microsoft.AspNet.WebApi.Client, restaure des paquets de nuget et si cela n'aide pas à supprimer WebApi.Client (et les dépendances) du projet, ajoutez-le en arrière et la référence à System.Net.Http.Formating sera à nouveau ajouté.

(solution alternative: ajouter une référence> parcourir> aller à "[dossier de solutions] packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45" et sélectionner "System.Net.Http.Formatting.dll"

3
JimiSweden