Pergunta

Eu estou procurando algumas informações sobre o roteamento em MVC com C #. Atualmente estou muito consciente dos princípios básicos de roteamento no MVC, mas o que eu estou procurando é um pouco difícil de encontrar.

Com efeito, o que eu quero é encontrar uma maneira de definir uma única rota que leva um único parâmetro.

Os exemplos comuns que eu encontrei on-line é tudo baseado em torno do exemplo

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{id}"
    new { controller = "Default", action="Index", id=""});

Ao mapear esse caminho, você pode mapear a qualquer ação em qualquer controlador, mas se você quer passar alguma coisa para a ação, o parâmetro método deve ser chamado "id". Eu quero encontrar uma maneira de contornar isso, se é possível, para que eu não tenho para especificar constantemente rotas apenas para usar um nome de parâmetro diferente em minhas ações.

Alguém tem alguma idéia ou encontrado uma maneira de contornar isso?

Foi útil?

Solução

Você pode construir as rotas como você gosta

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}"
    new { controller = "Default", action="Index", param1="", param2="", param3=""});

Além disso, olhada neste post , que contém todo o tipo de amostras na seção de comentários

Outras dicas

Se você quer ter um nome de parâmetro diferente e manter a mesma variável de roteamento, use o atributo FromUri assim:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
   // do stuff
}

Em suas rotas, tudo que você precisa é:

routes.MapRoute(
  "Default",
  "{controller}.mvc/{action}/{id}"
  new { controller = "Default", action="Index", id=""});

Eu não acho que você pode fazer exatamente o que você está pedindo. Quando MVC invoca uma ação que parece para os parâmetros em rotas, pedido params e a string de consulta. Ele está sempre olhando para coincidir com o nome do parâmetro.

Talvez bom string de consulta de idade vai atender às suas necessidades.

~/mycontroller/myaction/?foobar=123

vai passar 123 para esta ação:

public ActionResult MyAction(int? foobar)

Eu sei que este é há séculos, mas espero que ainda ajuda a alguém. Eu fiz a mesma pergunta antes. Eu acho que isto é o que você está procurando. Uma resposta citou minha pergunta post: "A {* pathInfo} bit é chamado de lesma. É basicamente um curinga dizendo 'tudo após este ponto é recheado em um parâmetro chamado pathInfo'. Assim, se você tem '{recurso} .axd / {* pathInfo}' e uma url assim: http://blah/foo.axd/foo/bar/baz/bing seguida, dois parâmetros são criados, um chamado recurso, que conteria foo e um chamado pathInfo que contém foo / bar / baz / bing ".

Embora você ainda não pode usar o atributo FromUri, você pode, contudo, usar o atributo Route, como assim

[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
  Policy.RemoveScheduledPriorAddressItem(sequence);
  return RedirectToAction("Information", new { id = Policy.Id });
}

Tecnicamente isso acrescenta uma nova rota, mas pelo menos ele não interfiram na sua routeconfig. Ela coloca o direito definição de rota por onde ele é usado, o que eu como (menos de caça coisas para baixo).

Lembre-se, a fim de roteamento atributo uso, este deve estar no seu arquivo routeconfig acima suas rotas definidas:

routes.MapMvcAttributeRoutes();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top