4 votes

Authentification par formulaire avec WebAPI en utilisant Breeze

Je protège une interface WebAPI à l'aide de formulaires d'authentification, en utilisant Breezecontroller. Lorsque j'essaie d'appeler la méthode WebAPi, je reçois l'erreur suivante.

statut:404 statusText : "Non trouvé" message : "La requête de métadonnées a échoué pour:'' ;, Aucune ressource Http n'a été trouvée pour cette correspondance...

Ma question est de savoir pourquoi je ne reçois pas le message "UnAuthorized error(401)". ? Les métadonnées sont également décorées avec [Authorize].

Il semble que la redirection de FormsAuthentication pose problème. Il redirige vers la méthode WebApi Login(has AllowAnonymous) et signale qu'il ne peut pas la trouver, même si je l'ai fait. De plus, j'applique l'Authrozie aux méthodes plutôt qu'au contrôleur.

  {"$id":"1","$type":"System.Web.Http.HttpError,System.Web.Http","Message":"NoHTTPresourcewasfoundthatmatchestherequestURI'http://localhost:40678/api/Country/Login?ReturnUrl=/api/Country/Metadata'.","MessageDetail":"Noactionwasfoundonthecontroller'Country'thatmatchestherequest."}

3voto

Ward Points 9920

Je viens d'essayer et ça marche bien. Je parie que vous avez une erreur dans votre URL.

Voici le préliminaire de mon contrôleur :

\[Authorize\]
\[BreezeController\]
public class BreezeTodoController : ApiController
{
    private readonly BreezeTodoContext \_context;

    public BreezeTodoController() {
        \_context = new BreezeTodoContext(User);
    }

    \[HttpGet\]
    public string Metadata() {
        return \_context.Metadata();
    }
    // ... more

Je l'ai trouvé avec cette URL

http://localhost:32377/api/breezetodox/metadata

Et je récupère la 401

Request URL:http://localhost:32377/api/breezetodo/metadata
Request Method:GET
Status Code:401 Unauthorized

Mais si je fais une erreur dans l'URL (voir 'x' après breezetodo)

Request URL:http://localhost:32377/api/breezetodox/metadata
Request Method:GET
Status Code:404 Not Found

Même chose si le nom de mon action ne correspond pas (voir "x" après les métadonnées) :

Request URL:http://localhost:32377/api/breezetodo/metadatax
Request Method:GET
Status Code:404 Not Found

En d'autres termes, HTTP ne peut pas signaler qu'une ressource est non autorisée s'il ne peut pas trouver cette ressource en premier lieu.

0voto

Jennifer Points 1

Lorsque vous marquez le BreezeController avec [Authorize] et que vous essayez ensuite de récupérer les métadonnées Breeze directement avec ce lien :

Request URL:http://localhost/breeze/breeze/metadata

redirige vers :

http://localhost/Login?ReturnUrl=%2Fbreeze%2Fbreeze%2Fmetadata with a 404

Sans [Authorize], l'accès aux métadonnées de Breeze avec le même lien fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X