Pergunta

Existe um padrão específico que os desenvolvedores geralmente seguem? Eu realmente nunca deu muita atenção antes em minhas aplicações web, mas o mecanismo de roteamento ASP.NET MVC praticamente o obriga a pelo menos levá-la em consideração.

Até agora, eu gostei da ação / estrutura do controlador / index (por exemplo, produtos / Editar / 1), mas eu estou lutando com urls mais complexos.

Por exemplo, digamos que você tem uma página que lista todos os produtos um usuário tem em sua conta. Como você faria? Em cima da minha cabeça eu posso pensar as seguintes possibilidades para uma página de listagem e uma página de edição:

  1. User / {user id} / Produtos / Lista, Usuário / {user id} / Produtos / Editar / {id produto}
  2. User / {user id} / produtos, Usuário / {user id} / produtos / {id produto}
  3. produtos? UserID = {user id}, os produtos / Editar / {id produto}

Eu tenho certeza que existem muitos outros que estou em falta. Algum conselho?

Foi útil?

Solução

Eu gosto de RESTful, URLs amigáveis ??e hackable usuário.

O que isso significa? Vamos começar com URLs amigáveis ??. Para mim, um URL amigável é algo fácil de digitar e fácil de lembrar /Default.aspx?action=show&userID=140 não cumprir algum destes requisitos. A URL como `/ usuários / troethom' parece que lógico.

Isso leva ao próximo ponto. A hackable URL é uma URL que o usuário pode modificar e ainda se apresentou com um resultado. Se a URL é hackable ea URL para o meu perfil é /users/troethom seria seguro para remover o meu nome de usuário para obter uma lista de usuários (/users).

Usando URLs RESTful é bastante semelhante às ideias por trás minhas outras sugestões. Você está projetando URLs para um usuário e não para uma máquina e, portanto, o URL tem de se relacionar com o conteúdo e não o back-end técnica do seu site. Uma URL como "/ users' faz mais sentido do '/ users / list' e um URL como" / category / programação / javascript' (representando a subcategoria 'javascript' na categoria 'programação' é melhor do que' / category / show / 12'.

Na verdade, é mais difícil de IDs omitir, mas no meu mundo que vale a pena o esforço.

Também consulte seção URIs Entendimento em W3C's HTTP comuns problemas de implementação. Ele tem uma lista de armadilhas comuns ao projetar URIs. Outro bom recurso é Engenhoso Vs Hackable Pesquisa URLs .

Outras dicas

Você pode querer dar uma olhada na pergunta " esquema url amigável? ".

Particularmente, a resposta de Larry.Smithmier forneceu uma lista de esquemas de URL comuns ao usar MVC em ASP.NET.

Além disso, você pode considerar o uso de verbos diferentes para reutilizar as mesmas rotas para ações diferentes. Por exemplo, uma solicitação GET para "Produtos / Editar / 45" iria mostrar o editor do produto, enquanto que um POST para o mesmo url seria atualizar o produto. Você pode usar o atributo AcceptVerb para fazer isso:

[AcceptVerb("GET")]
public ActionResult Edit(int id)
{
    ViewData["Product"] = _products.Get(id);
    return View();
}

[AcceptVerb("POST")]
public ActionResult Edit(int id, string title, string description)
{
    _products.Update(id, title, description);
    TempData["Message"] = "Changes saved successfully!";

    return RedirectToAction("Edit", new { id });
}

Bill de hora escreveu um muito bom ensaio intitulado recursos Web para frameworks que é uma leitura bem a pena.

Para adicionar comentários de troethom, RESTful geralmente também significa que, por exemplo, para criar um novo usuário você colocaria uma representação a / usuários / newusername

RESTful basicamente usa os 5 métodos HTTP padrão (GET, PUT, POST, DELETE cabeça) para o controle / acesso ao conteúdo.

Ok, isso não é fácil para um navegador web, mas você sempre pode usar sobrecarregado POST (post para / usuários / nome de usuário com uma representação de um usuário alterar alguns dos detalhes, etc.

É uma boa maneira de fazer as coisas, eu recomendo a leitura Web RESTful para obter uma melhor compreensão: D (! e é um bom danado livro)

Eu vi duas principais formas aceitas de abordar este tema ...

Um é descrito no MvcContrib documentação do projeto

eo outro é descrito em uma post de Stephen Walther (que eu, pessoalmente, prefiro).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top