Самостоятельный хост веб-API ASP.NET с проверкой подлинности Windows

Я пытаюсь использовать вариант самостоятельного размещения веб-API ASP.NET с проверкой подлинности Windows, чтобы я мог определить вошедшего в систему пользователя и, в конечном итоге, принять или отклонить пользователя на основе его личности. Вот код моего консольного приложения:

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();
            }
        }
    }
}

Вот контроллер:

[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;
    }
}

Правка — я добавил атрибут Authorize, и отладчик показывает, что код внутри метода действия Get никогда не вызывается. Возвращается следующий HTML-код:

<!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>

Если атрибут Authorize закомментирован, Request.GetUserPrincipal().Identity.Name выдает исключение нулевой ссылки, поскольку Request.GetUserPrincipal() дает нулевой.

23
задан Dave Johnson 19 March 2012 в 19:00
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: