2011-08-23 56 views
0

下面是一个示例。假设你有以下作用:mvccontrib测试助手和验证http发布路线和参数

public AccountController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Foo(string id) 
    { 
     return View(); 
    } 
} 

并注册了以下路线:

RouteTable.Routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "home", action = "index", id = "" } 
); 

我测试它像这样:

var routeData = "~/account/foo".WithMethod(HttpVerbs.Post); 
routeData.Values["id"] = "123"; 
routeData.ShouldMapTo<AccountController>(c => c.Foo("123")); 

但这项工作也有Get和唐”不得不工作:

var routeData = "~/account/foo".WithMethod(HttpVerbs.Get); 
routeData.Values["id"] = "123"; 
routeData.ShouldMapTo<AccountController>(c => c.Foo("123")); 

为什么?

更新1:

我真正的方法是:

public ActionResult Novo() 
{ 
    NovoViewModel novoViewModel = new NovoViewModel(); 
    novoViewModel.Sexos = GetSexos(); 
    novoViewModel.Status = GetStatus(); 

    return View(novoViewModel); 
} 

[HttpPost] 
public ActionResult Novo(NovoViewModel novoViewModel) 
{ 
    //Validações de autenticação 
    if (_authenticationService.IsUserRegistered(novoViewModel.NomeUsuario)) 
    { 
     ModelState.AddModelError("ExistingUsername", String.Format(ViewModelValidations.ExistingUsername, "Usuário")); 
    } 

    if (_usuarioRepository.PegaUsuarioPorEmail(novoViewModel.Email) != null) 
    { 
     ModelState.AddModelError("ExistingEmail", String.Format(ViewModelValidations.ExistingEmail, "Email")); 
    } 

    if (ModelState.IsValid) { 
     Usuario usuario = new Usuario() 
           { 
            Nome = novoViewModel.Nome, 
            Email = novoViewModel.Email, 
            Telefone = novoViewModel.Telefone, 
            DataNascimento = Convert.ToDateTime(novoViewModel.DataNascimento), 
            Sexo = !String.IsNullOrEmpty(novoViewModel.SexoSelecionado) ? (Sexo?)(Convert.ToByte(novoViewModel.SexoSelecionado)) : null, 
            Credencial = new Credencial() 
                { 
                 NomeUsuario = novoViewModel.NomeUsuario, 
                 Senha = novoViewModel.Senha, 
                 Status = (Status)Convert.ToByte(novoViewModel.SexoSelecionado) 
                } 
           }; 

     _usuarioRepository.Add(usuario); 

     _dbContext.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 

    novoViewModel.Sexos = GetSexos(); 
    novoViewModel.Status = GetStatus(); 

    return View(novoViewModel); 
} 
+0

你能告诉我们你的GET操作方法? – frennky

+0

@frennky请参阅更新。 –

+0

我想知道同样的事情,我不明白.WithMethod正在做什么,或者我应该如何使用它。 –

回答

0

尝试把ID的网址,你正在测试:

var routeData = "~/account/foo/123".WithMethod(HttpVerbs.Post); 
+0

不,我的页面在同一页面上发帖:“〜/ account/foo /” –