HttpSelfHostServer с UserNamePasswordValidator

Я настраиваю WebApi, используя HttpSelfHostServer с базовой безопасностью, используя UserNamePasswordValidator с пользовательской проверкой пользователя.

Все приложение работает нормально, каждый раз, когда я делаю запрос, Api запрашивает учетные данные и проверяет их.

Единственная проблема, которая у меня есть, заключается в том, что в случае сбоя проверки пользователя метод Validate выдает и исключение, но это исключение "исчезает в воздухе". Я имею в виду, что браузер не отображает сообщение об исключении, как в исключениях контроллера, и сообщение об исключении Оно не зарегистрировано приложением, точно так же, как исключение не существует вообще.

Это мой код:

Service.cs

public partial class AperturaDatosSvc2:ServiceBase
{



    public AxoftAperturaDatosSvc2()
    {
        InitializeComponent();
    }

    HttpSelfHostServer server = null;

    const string  port =8000;

    protected override void OnStop()
    {
        try
        { 
        if (hosts != null)
           foreach (HttpSelfHostServer h in hosts)
                h.CloseAsync();
        }
        catch (Exception ex)
        {

            LOGs.Write(LOGs.eLogType.ERROR, "OnStop", ex.Message);
        }
    }

     protected override void OnStart(string[] args)
     {
        HttpSelfHostConfiguration config = null;
        server = null;

        Uri httpUrl = new Uri(string.Format("http://localhost:{0}/", port));

        //Create ServiceHost
        config = new HttpSelfHostConfiguration(httpUrl);

        config.Routes.MapHttpRoute("AperturaController", "{Controller}/" + Utils.GetSafeHLNumber(hlnumber).Replace("_", "-") + "/{empresa}/{obj}/{parametros}/{campos}", defaults: new { Controller = "AperturaController", empresa = RouteParameter.Optional, obj = RouteParameter.Optional, parametros = RouteParameter.Optional, campos = RouteParameter.Optional });

        config.ClientCredentialType = HttpClientCredentialType.Basic;

        config.UserNamePasswordValidator = new ValidadorUsuario(this.config.Find(x => x.HLNUMBER == hlnumber), llaves.Find(x => x.llave == hlnumber));          

        config.ClientCredentialType = HttpClientCredentialType.Basic;                           

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
                        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);          

        server = new HttpSelfHostServer(config);
        var task = h.OpenAsync();
        task.Wait();
    }
}

UserValidate.cs

 public class ValidateUser : UserNamePasswordValidator
{

    DBManager _dbm;
    DBManager dbm
    {
        get
        {
            _dbm = new DBManager(Connection);
            return _dbm;
        }
    }




    public override void Validate(string userName, string password)
    {

        string pwdEnc = string.Empty;

        try
        {

            if (cfg != null)
            {


                DICCIO_USER usuario = dbm.getUsuario(userName);

                if ((usuario == null))
                {

                    AddressAccessDeniedException exep = new AddressAccessDeniedException("Nombre de usuario o contraseña no válidos.");
                    exep.Data["HttpStatusCode"] = HttpStatusCode.Unauthorized;

                    throw exep;

                }
                else if (!ValidateUser(cfg, userName, password))
                {
                    AddressAccessDeniedException exep = new AddressAccessDeniedException("Ocurrio un error al intentar acceder al sistema" + cfg.HLNUMBER + ".");
                    exep.Data["HttpStatusCode"] = HttpStatusCode.Unauthorized;

                    throw new MessageSecurityException("Nombre de usuario o contraseña incorrectos.", new FaultException("Nombre de usuario o contraseña incorrectos."));
                }
                else
                {
                        var currentPrincipal = new GenericPrincipal(new GenericIdentity(userName), null);                        
                        Thread.CurrentPrincipal = currentPrincipal;

                        Console.WriteLine(DateTime.Now.ToString() + " Validation success for user : " + userName);

                        DesLogueoTango(cfg.HLNUMBER);

                    }
            }


            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);             
            }            
    }

0 ответов

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