13
respostas

Aplicação acusando erro de excessão de argumento no webmatrix ao autenticar login

Bom dia, terminei o meu projeto, sem nenhum erro aparente, porém ao clicar no botão de autenticar o login no local host o visual studio acusa o seguinte erro " An exception of type 'System.ArgumentException' occurred in WebMatrix.WebData.dll but was not handled in user code - Additional information: Value cannot be null or an empty string", e o visual studio abre a janela do logincontroller grifando aonde poderia estar o erro, que é o if(websecurity..) e else do login na action result autentica. Como corrigir este problema?

13 respostas

Olá Leonardo,

Este erro indica que alguma das string veio com o texto vazio ou null. Então o login e/ou a senha acabou não sendo enviado para o método Autentica. Como está o seu formulário HTML de login? No formulário, o valor no atributo name dos inputs de login e senha estão iguais aos nomes dos parâmetros no método Autentica do LoginController?

Boa noite,obrigado por ter respondido não sei se o problema é com o simple membership, porque é só quando eu clicko no botão autenticar sem digitar dado nenhum no campo de autenticação, nos outros formulários este problema não ocorre.No visual studio não aparece nenhum dado de números de erros, acredito que não seja problema de sintaxe, acusa também este erro na dropdown list da view do movimentações por usuário acusando o lambda ( m.usuarioID ). Tentei também modificar e substituir o arquivo de banco de dados .mdf no management studio do sql server para permitir nulos e acabou piorando tudo, dando outros erros. Existe alguma maneira de consertar este erro. É pelo banco de dados .mdf? Porque eu também tentei dar um update-database do entity modificando na model, sem sucesso também

Olá Leonardo,

quando você preenche os campos de login e senha normalmente ele funciona? Poderia mandar o seu código para eu dar uma olhada? Manda o formulário HTML, o LoginController e o system.web.

O problema do DropDown List eu já resolvi, agora só falta do login.Sim quando eu preencho funciona normalmente, o problema é só quando eu clico no botão autenticar sem preencher nada nos campos no menu de login. Acredito que seja um problema do simplemembership, porque no capítulo 5 o instrutor trata um erro de excessão para não ter usuários duplicados com try e catch, acredito que teria que tratar este erro de dados nulos com try e catch também . Eu testei o projeto completo zipado do alura que ele oferece no final do curso e também dá o mesmo erro quando eu não digito nada do login e autentico. acredito que o problema não seja comigo e sim com o projeto do Alura. Já revi o meu código umas 20 vezes. Eu preciso deste projeto 100%, sem nenhum erro porque eu preciso colocar no ar num servidor gratuito, para procurar estágio e não pode ter nenhum erro para poder subir no site. Obrigado, fico no aguardo

Login controller

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebMatrix.WebData;

namespace Financas.Controllers { public class LoginController : Controller { // GET: Login public ActionResult Index() { return View(); } public ActionResult Autentica(string login, string senha ) { if (WebSecurity.Login(login, senha)) { return RedirectToAction("Index", "Movimentacao"); } else {

ModelState.AddModelError("Login.Invalido", "Login ou senha incorretos"); return View("Index"); } } public ActionResult Logout() { WebSecurity.Logout(); return RedirectToAction("Index");

} } }

System.Web:

insira seu código aqui

<system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <membership defaultProvider="financasProvider">
      <providers>
        <add name="financasProvider" 
             type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>
    </system.web>
<system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <membership defaultProvider="financasProvider">
      <providers>
        <add name="financasProvider" 
             type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>
    </system.web>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebMatrix.WebData;

namespace Financas.Controllers
{
    public class LoginController : Controller
    {
        // GET: Login
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult Autentica(string login, string senha )
        {
               if (WebSecurity.Login(login, senha))
            {
                return RedirectToAction("Index", "Movimentacao");
            }
               else
            {

                ModelState.AddModelError("Login.Invalido", "Login ou senha incorretos");
                return View("Index");
            }
            }
        public ActionResult Logout()
        {
            WebSecurity.Logout();
            return RedirectToAction("Index");



        }
    }
}
<form action="@Url.Action("Autentica")" method="post">
    @Html.ValidationMessage("Login.Invalido")

    <label for="login">Login:</label>
    <input id="login"  name="login" type="text" class="form-control" />

    <label for="senha">Senha:</label>
    <input id="senha" name="senha"  type="password" class="form-control" />

    <input type="submit" value="Autenticar" />
</form>

Olá Leonardo,

seu código parece correto, achava que nem o login estava funcionando. Mas o cenário de erro no qual o usuário não preenche nenhum dos campos realmente não é abordado no curso. O foco é mais mostrar como fazer a página de login, o LoginController e as validações com o WebSecurity. Para o caso de validar se o campo foi preenchido, basta você adicionar no seu código java um if que verifica se o login/senha está null ou vazio. Se estiver, volta para a tela de login. Caso contrário, faz essas validações com o WebSecurity que já estão no seu código.

Vou tentar consertar, qualquer coisa eu faço um outro projeto do zero de um livro que eu comprei da casa do codigo. valeu

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software