ASP.NET l'API Web de l'Auto-organisation avec l'Authentification Windows

Je suis en train d'utiliser l'ASP.NET l'API Web de l'Auto-Hôte de l'option avec l'authentification Windows afin que je puisse déterminer l'utilisateur connecté et en fin de compte accepter ou de rejeter l'utilisateur sur la base de leur identité. Voici ma console le code de l'application:

using System;
using System.Web.Http;
using System.Web.Http.SelfHost;

namespace SelfHost
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = new HttpSelfHostConfiguration("http://myComputerName:8080");
            config.UseWindowsAuthentication = true;

            config.Routes.MapHttpRoute(
                "API Default", "api/{controller}/{id}",
                new { id = RouteParameter.Optional });

            using (HttpSelfHostServer server = new HttpSelfHostServer(config))
            {
                server.OpenAsync().Wait();

                Console.WriteLine("Press Enter to quit.");
                Console.ReadLine();
            }
        }
    }
}

Ici est le contrôleur:

[Authorize]
public class HelloController : ApiController
{
    public string Get()
    {
        //This next line throws an null reference exception if the Authorize
        //attribute is commented out.
        string userName = Request.GetUserPrincipal().Identity.Name;
        return "Hello " + userName;
    }
}

Edit - j'ai ajouté de l'Autoriser l'attribut, et le débogueur affiche que le code à l'intérieur de l'Obtenir par les méthodes d'action n'est jamais invoquée. Le code HTML suivant est renvoyé:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type></HEAD>
<BODY></BODY></HTML>

Si l'Autoriser attribut est commenté, Request.GetUserPrincipal().Identity.Name lève une exception de type référence nulle depuis Request.GetUserPrincipal() donne null.

  • Vous avez juste besoin de mettre un point de rupture et de savoir qui de la propriété ci-dessus est nulle... est "ControllerContext" null? ou "Demande" ou "GetUserPrincipal()" ou "Identité"?
  • Ouais, ce bien est de générer de la valeur null ref?
  • le Request.GetUserPrincipal() est null. J'ai ajouté le [Authorize] attribut comme suggéré par Eric le Roi et puis je viens de recevoir un os à nu de la page HTML avec le contenu entre deux balises de corps et il ne s'exécute le code à l'intérieur de mon Get méthode d'action dans la classe du contrôleur.
  • Avez-vous jamais résoudre ce que c'est?
  • merci pour l'ajout de la générosité! Je n'ai pas résolu ce un.
  • J'ai seulement besoin de selfhost pour les tests d'intégration, donc j'ai piraté le contourner en utilisant l'authentification de base spécialement à cet effet (tout fonctionne dans IIS).
  • Salut, un jour sur cette? J'ai le même cas d'utilisation pour mon application. Est-ce résolu?je vous remercie.
  • cool, juste paramètre HttpSelfHostConfiguration.ClientCredentialType pour windows fonctionne - probablement question suis fixé.

InformationsquelleAutor Dave Johnson | 2012-03-05