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
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;
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"