Notas de versão do ASP.NET MVC 4

Este documento descreve a versão do ASP.NET MVC 4 .

Notas de instalação

ASP.NET MVC 4 para Visual Studio 2010 pode ser instalado na home page do ASP.NET MVC 4 usando o Web Platform Installer.

É recomendável desinstalar as versões prévias instaladas anteriormente do ASP.NET MVC 4 antes de instalar o ASP.NET MVC 4. Você pode atualizar o ASP.NET MVC 4 Beta e Release Candidate para ASP.NET MVC 4 sem desinstalar.

Esta versão não é compatível com nenhuma versão prévia do .NET Framework 4.5. Você deve atualizar separadamente as versões prévias instaladas do .NET Framework 4.5 para a versão final antes de instalar ASP.NET MVC 4.

ASP.NET MVC 4 pode ser instalado e executado lado a lado com ASP.NET MVC 3.

Documentação

A documentação do ASP.NET MVC está disponível no site do MSDN na seguinte URL:

https://go.microsoft.com/fwlink/?LinkID=243043

Tutoriais e outras informações sobre ASP.NET MVC estão disponíveis na página MVC 4 do site do ASP.NET (https://www.asp.net/mvc/mvc4).

Suporte

ASP.NET MVC 4 tem suporte total. Se você tiver dúvidas sobre como trabalhar com esta versão, também poderá postá-las no fórum do ASP.NET MVC (https://forums.asp.net/1146.aspx), em que os membros da comunidade ASP.NET frequentemente podem fornecer suporte informal.

Requisitos de software

Os componentes do ASP.NET MVC 4 para Visual Studio exigem o PowerShell 2.0 e o Visual Studio 2010 com Service Pack 1 ou Visual Web Developer Express 2010 com Service Pack 1.

Novos recursos no ASP.NET MVC 4

Esta seção descreve os recursos que foram introduzidos na versão ASP.NET MVC 4.

ASP.NET Web API

ASP.NET MVC 4 inclui ASP.NET Web API, uma nova estrutura para criar serviços HTTP que podem alcançar uma ampla gama de clientes, incluindo navegadores e dispositivos móveis. ASP.NET Web API também é uma plataforma ideal para a criação de serviços RESTful.

ASP.NET Web API inclui suporte para os seguintes recursos:

  • Modelo de programação HTTP moderno: Acesse e manipule diretamente solicitações e respostas HTTP em suas APIs Web usando um novo modelo de objeto HTTP fortemente tipado. O mesmo modelo de programação e o pipeline HTTP estão simetricamente disponíveis no cliente por meio do novo tipo HttpClient .
  • Suporte completo para rotas: ASP.NET Web API dá suporte ao conjunto completo de recursos de rota do Roteamento de ASP.NET, incluindo parâmetros de rota e restrições. Além disso, use convenções simples para mapear ações para métodos HTTP.
  • Negociação de conteúdo: O cliente e o servidor podem trabalhar juntos para determinar o formato certo para os dados que estão sendo retornados de uma API Web. ASP.NET Web API fornece suporte padrão para formatos codificados em URL de formulário, JSON e XML e você pode estender esse suporte adicionando seus próprios formatadores ou até mesmo substituir a estratégia de negociação de conteúdo padrão.
  • Associação e validação de modelo: Os associadores de modelo fornecem uma maneira fácil de extrair dados de várias partes de uma solicitação HTTP e converter essas partes de mensagem em objetos .NET que podem ser usados pelas ações da API Web. A validação também é executada em parâmetros de ação com base em anotações de dados.
  • Filtros: ASP.NET Web API dá suporte a filtros, incluindo filtros conhecidos, como o atributo [Authorize]. Você pode criar e conectar seus próprios filtros para ações, autorização e tratamento de exceções.
  • Composição de consulta: Use o atributo de filtro [Queryable] em uma ação que retorna IQueryable para habilitar o suporte para consultar sua API Web por meio das convenções de consulta OData.
  • Capacidade de teste aprimorada: Em vez de definir detalhes HTTP em objetos de contexto estático, as ações da API Web funcionam com instâncias de HttpRequestMessage e HttpResponseMessage. Crie um projeto de teste de unidade junto com seu projeto de API Web para começar a escrever rapidamente testes de unidade para sua funcionalidade de API Web.
  • Configuração baseada em código: ASP.NET Web API configuração é realizada exclusivamente por meio do código, deixando seus arquivos de configuração limpo. Use o padrão de localizador de serviço fornecido para configurar pontos de extensibilidade.
  • Suporte aprimorado para contêineres de IoC (Inversão de Controle): ASP.NET Web API oferece ótimo suporte para contêineres de IoC por meio de uma abstração aprimorada do resolvedor de dependência
  • Auto-host: As APIs Web podem ser hospedadas em seu próprio processo, além do IIS, enquanto ainda usam todo o poder de rotas e outros recursos da API Web.
  • Criar páginas de ajuda e teste personalizadas: Agora você pode criar facilmente páginas de ajuda e teste personalizadas para suas APIs Web usando o novo serviço IApiExplorer para obter uma descrição completa do runtime de suas APIs Web.
  • Monitoramento e diagnóstico: ASP.NET Web API agora fornece infraestrutura de rastreamento leve que facilita a integração com soluções de log existentes, como System.Diagnostics, ETW e estruturas de registro em log de terceiros. Você pode habilitar o rastreamento fornecendo uma implementação ITraceWriter e adicionando-a à sua configuração de API Web.
  • Geração de link: Use o ASP.NET Web API UrlHelper para gerar links para recursos relacionados no mesmo aplicativo.
  • Modelo de projeto de API Web: Selecione o novo projeto de API Web do assistente Novo Projeto MVC 4 para começar a trabalhar rapidamente com ASP.NET Web API.
  • Andaime: Use a caixa de diálogo Adicionar Controlador para estruturar rapidamente um controlador de API Web com base em um tipo de modelo baseado no Entity Framework.

Para obter mais detalhes sobre ASP.NET Web API visite https://www.asp.net/web-api.

Aprimoramentos nos modelos de projeto padrão

O modelo usado para criar novos projetos ASP.NET MVC 4 foi atualizado para criar um site mais moderno:

Captura de tela da exibição do navegador da nova página de modelo de projeto.

Além das melhorias cosméticas, há funcionalidade aprimorada no novo modelo. O modelo emprega uma técnica chamada renderização adaptável para ter uma boa aparência em navegadores da área de trabalho e em navegadores móveis sem nenhuma personalização.

Captura de tela da exibição do navegador móvel da versão da área de trabalho da página do novo modelo de projeto.

Para ver a renderização adaptável em ação, você pode usar um emulador móvel ou apenas tentar redimensionar a janela do navegador da área de trabalho para ser menor. Quando a janela do navegador ficar pequena o suficiente, o layout da página será alterado.

Modelo de projeto móvel

Se você estiver iniciando um novo projeto e quiser criar um site especificamente para navegadores móveis e tablets, poderá usar o novo modelo de projeto de Aplicativo Móvel. Isso se baseia no jQuery Mobile, uma biblioteca de software livre para criar interface do usuário com otimização de toque:

Captura de tela da exibição do navegador móvel do modelo de projeto de aplicativo móvel.

Esse modelo contém a mesma estrutura de aplicativo que o modelo de Aplicativo da Internet (e o código do controlador é praticamente idêntico), mas é estilizado usando jQuery Mobile para parecer bem e se comportar bem em dispositivos móveis baseados em toque. Para saber mais sobre como estruturar e estilizar a interface do usuário móvel, consulte o site do projeto jQuery Mobile.

Se você já tiver um site orientado para área de trabalho ao qual deseja adicionar modos de exibição otimizados para dispositivos móveis ou se quiser criar um único site que atenda a modos de exibição com estilos diferentes para navegadores móveis e desktop, poderá usar o novo recurso Modos de Exibição. (Confira a próxima seção.)

Modos de Exibição

O novo recurso Modos de Exibição permite que um aplicativo selecione exibições dependendo do navegador que está fazendo a solicitação. Por exemplo, se um navegador da área de trabalho solicitar a Home page, o aplicativo poderá usar o modelo Views\Home\Index.cshtml. Se um navegador móvel solicitar a Home page, o aplicativo poderá retornar o modelo Views\Home\Index.mobile.cshtml.

Layouts e parciais também podem ser substituídos para tipos de navegador específicos. Por exemplo:

  • Se a pasta Views\Shared contiver os modelos _Layout.cshtml e _Layout.mobile.cshtml, por padrão, o aplicativo usará _Layout.mobile.cshtml durante solicitações de navegadores móveis e _Layout.cshtml durante outras solicitações.
  • Se uma pasta contiver _MyPartial.cshtml e _MyPartial.mobile.cshtml, a instrução @Html.Partial("_MyPartial") renderizará _MyPartial.mobile.cshtml durante solicitações de navegadores móveis e _MyPartial.cshtml durante outras solicitações.

Se você quiser criar modos de exibição, layouts ou exibições parciais mais específicos para outros dispositivos, poderá registrar uma nova instância DefaultDisplayMode para especificar qual nome pesquisar quando uma solicitação atender a condições específicas. Por exemplo, você pode adicionar o seguinte código ao método Application_Start no arquivo Global.asax para registrar a cadeia de caracteres "iPhone" como um modo de exibição que se aplica quando o navegador Apple iPhone faz uma solicitação:

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});

Depois que esse código for executado, quando um navegador apple iPhone fizer uma solicitação, seu aplicativo usará o layout Views\Shared\_Layout.iPhone.cshtml (se existir). Para obter mais informações sobre o Modo de Exibição, consulte ASP.NET Recursos móveis do MVC 4. Os aplicativos que usam DisplayModeProvider devem instalar o pacote NuGet DisplayModes Fixo . O ASP.NET Fall 2012 Update inclui o pacote NuGet DisplayModes Fixo nos novos modelos de projeto. Consulte ASP.NET Bug de cache do MVC 4 Mobile Corrigido para obter detalhes sobre a correção.

JQuery Mobile and Mobile Features

Para obter informações sobre como criar aplicativos móveis com ASP.NET MVC 4 usando o jQuery Mobile, consulte o tutorial ASP.NET MVC 4 Mobile Features.

Suporte à tarefa para controladores assíncronos

Agora você pode escrever métodos de ação assíncrona como métodos únicos que retornam um objeto do tipo Task ou Task<ActionResult>.

Para obter mais informações, consulte Usando métodos assíncronos no ASP.NET MVC 4.

SDK do Azure

ASP.NET MVC 4 dá suporte às versões 1.6 e mais recentes do SDK do Windows Azure.

Migrações de banco de dados

ASP.NET projetos MVC 4 agora incluem o Entity Framework 5. Um dos grandes recursos do Entity Framework 5 é o suporte para migrações de banco de dados. Esse recurso permite que você evolua facilmente seu esquema de banco de dados usando uma migração focada em código, preservando os dados no banco de dados. Para obter mais informações sobre migrações de banco de dados, consulte Adicionar um novo campo ao modelo e à tabela de filmes no tutorial Introdução ao ASP.NET MVC 4.

Modelo de projeto vazio

O modelo de projeto MVC Empty agora está realmente vazio para que você possa começar de um slate completamente limpo. A versão anterior do modelo de projeto Empty foi renomeada para Básico.

Adicionar o Controlador a qualquer pasta de projeto

Agora você pode clicar com o botão direito do mouse e selecionar Adicionar Controlador de qualquer pasta em seu projeto MVC. Isso oferece mais flexibilidade para organizar seus controladores como desejar, incluindo manter seus controladores de API Web e MVC em pastas separadas.

Agrupamento e minificação

A estrutura de agrupamento e minificação permite reduzir o número de solicitações HTTP que uma página da Web precisa fazer combinando arquivos individuais em um único arquivo agrupado para scripts e CSS. Em seguida, ele pode reduzir o tamanho geral dessas solicitações, minificando o conteúdo do pacote. A minificação pode incluir atividades como eliminar o espaço em branco para reduzir nomes de variáveis até mesmo recolher seletores CSS com base em sua semântica. Os pacotes são declarados e configurados no código e são facilmente referenciados em exibições por meio de métodos auxiliares que podem gerar um único link para o pacote ou, ao depurar, vários links para o conteúdo individual do pacote. Para obter mais informações, consulte Agrupamento e minificação.

Habilitando logons do Facebook e de outros sites usando OAuth e OpenID

Os modelos padrão em ASP.NET modelo de Projeto de Internet do MVC 4 agora incluem suporte para logon OAuth e OpenID usando a biblioteca DotNetOpenAuth. Para obter informações sobre como configurar um provedor OAuth ou OpenID, consulte Suporte OAuth/OpenID para WebForms, MVC e WebPages e a documentação do recurso OAuth e OpenID no Páginas da Web do ASP.NET.

Atualizando um projeto ASP.NET MVC 3 para ASP.NET MVC 4

ASP.NET MVC 4 pode ser instalado lado a lado com ASP.NET MVC 3 no mesmo computador, o que oferece flexibilidade na escolha de quando atualizar um aplicativo MVC 3 ASP.NET para ASP.NET MVC 4.

A maneira mais simples de atualizar é criar um novo projeto ASP.NET MVC 4 e copiar todos os modos de exibição, controladores, código e arquivos de conteúdo do projeto MVC 3 existente para o novo projeto e, em seguida, atualizar as referências de assembly no novo projeto para corresponder a qualquer modelo não MVC incluído assembiles que você está usando. Se você tiver feito alterações no arquivo Web.config no projeto MVC 3, também deverá mesclar essas alterações no arquivo Web.config no projeto MVC 4.

Para atualizar manualmente um aplicativo MVC 3 ASP.NET existente para a versão 4, faça o seguinte:

  1. Em todos os arquivos Web.config no projeto (há um na raiz do projeto, um na pasta Exibições e outro na pasta Exibições para cada área do projeto), substitua todas as instâncias do seguinte texto (observação: System.Web.WebPages, Version=1.0.0.0 não é encontrado em projetos criados com o Visual Studio 2012):

    System.Web.Mvc, Version=3.0.0.0
    System.Web.WebPages, Version=1.0.0.0
    System.Web.Helpers, Version=1.0.0.0
    System.Web.WebPages.Razor, Version=1.0.0.0
    

    com o seguinte texto correspondente:

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0
    System.Web.WebPages.Razor, Version=2.0.0.0
    
  2. No arquivo de Web.config raiz, atualize o elemento webPages:Version para "2.0.0.0" e adicione uma nova chave PreserveLoginUrl que tenha o valor "true":

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. Em Gerenciador de Soluções, clique com o botão direito do mouse em Referências e selecione Gerenciar Pacotes NuGet. No painel esquerdo, selecione Online\Fonte do pacote oficial do NuGet e atualize o seguinte:

    • ASP.NET MVC 4
    • (Opcional) jQuery, jQuery Validation e jQuery UI
    • (Opcional) Entity Framework
    • (Optonal) Modernizr
  4. Em Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto e selecione Descarregar Projeto. Em seguida, clique com o botão direito do mouse no nome novamente e selecione Editar ProjectName.csproj.

  5. Localize o elemento ProjectTypeGuids e substitua {E53F8FEA-EAE0-44A6-8774-FFD645390401} por {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

  6. Salve as alterações, feche o arquivo do projeto (.csproj) que você estava editando, clique com o botão direito do mouse no projeto e selecione Recarregar Projeto.

  7. Se o projeto fizer referência a bibliotecas de terceiros compiladas usando versões anteriores do ASP.NET MVC, abra o arquivo de Web.config raiz e adicione os três seguintes elementos bindingRedirect na seção de configuração :

    <configuration>
      <!--... elements deleted for clarity ...-->
     
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

Alterações de ASP.NET candidato à versão do MVC 4

As notas sobre a versão do ASP.NET MVC 4 Release Candidate podem ser encontradas aqui:

As principais alterações do ASP.NET MVC 4 Release Candidate nesta versão são resumidas abaixo:

  • Configuração por controlador: ASP.NET Web API controladores podem ser atribuídos com um atributo personalizado que implementa IControllerConfiguration para configurar seus próprios formatadores, seletor de ação e associadores de parâmetros. O HttpControllerConfigurationAttribute foi removido.
  • Manipuladores de mensagens por rota: Agora você pode especificar o manipulador de mensagens final na cadeia de solicitações para uma determinada rota. Isso permite que o suporte para estruturas de ride along use o roteamento para expedir para seus próprios pontos de extremidade (não IHttpController).
  • Notificações de progresso: O ProgressMessageHandler gera uma notificação de progresso para as entidades de solicitação que estão sendo carregadas e as entidades de resposta que estão sendo baixadas. Usando esse manipulador, é possível acompanhar até que ponto você está carregando um corpo da solicitação ou baixando um corpo de resposta.
  • Enviar conteúdo por push: A classe PushStreamContent permite cenários em que um produtor de dados deseja gravar diretamente na solicitação ou resposta (de forma síncrona ou assíncrona) usando um fluxo. Quando o PushStreamContent está pronto para aceitar dados, ele chama um delegado de ação com o fluxo de saída. Em seguida, o desenvolvedor pode gravar no fluxo pelo tempo necessário e fechar o fluxo quando a gravação for concluída. O PushStreamContent detecta o fechamento do fluxo e conclui a Tarefa assíncrona subjacente para gravar o conteúdo.
  • Criando respostas de erro: Use o tipo HttpError para representar consistentemente informações de erro de, como erros de validação e exceções, enquanto ainda respeita a IncludeErrorDetailPolicy. Use os novos métodos de extensão CreateErrorResponse para criar facilmente respostas de erro com HttpError como conteúdo. O conteúdo do HttpError é totalmente negociado.
  • MediaRangeMapping removido: Os intervalos de tipo de mídia agora são tratados pelo negociador de conteúdo padrão.
  • A associação de parâmetro padrão para parâmetros de tipo simples agora é [FromUri]: Em versões anteriores do ASP.NET Web API a associação de parâmetro padrão para parâmetros de tipo simples usados associação de modelo. A associação de parâmetro padrão para parâmetros de tipo simples agora é [FromUri].
  • A seleção de ação respeita os parâmetros necessários: A seleção de ações no ASP.NET Web API agora selecionará apenas uma ação se todos os parâmetros necessários provenientes do URI forem fornecidos. Um parâmetro pode ser especificado como opcional fornecendo um valor padrão para o argumento na assinatura do método de ação.
  • Personalizar associações de parâmetro HTTP: Use o ParameterBindingAttribute para personalizar a associação de parâmetro para um parâmetro de ação específico ou usar ParameterBindingRules no HttpConfiguration para personalizar as associações de parâmetro de forma mais ampla.
  • Melhorias de MediaTypeFormatter: Os formatadores agora têm acesso à instância completa do HttpContent .
  • Seleção da política de buffer de host: Implemente e configure o serviço IHostBufferPolicySelector no ASP.NET Web API para permitir que os hosts determinem a política para quando o buffer deve ser usado.
  • Acesse certificados de cliente de maneira independente do host: Use o método de extensão GetClientCertificate para obter o certificado do cliente fornecido da mensagem de solicitação.
  • Extensibilidade de negociação de conteúdo: Personalize a negociação de conteúdo derivando do DefaultContentNegotiator e substituindo qualquer aspecto da negociação de conteúdo que você gostaria.
  • Suporte para retornar 406 respostas não aceitáveis: Agora você pode retornar 406 respostas Não Aceitáveis em ASP.NET Web API quando um formatador adequado não for encontrado criando um DefaultContentNegotiator com o parâmetro excludeMatchOnTypeOnly definido como true.
  • Leia os dados do formulário como NameValueCollection ou JToken: Você pode ler dados de formulário na cadeia de caracteres de consulta URI ou no corpo da solicitação como um NameValueCollection usando os métodos de extensão ParseQueryString e ReadAsFormDataAsync , respectivamente. Da mesma forma, você pode ler dados de formulário na cadeia de caracteres de consulta URI ou no corpo da solicitação como um JToken usando os métodos de extensão TryReadQueryAsJson e ReadAsAsync<T> , respectivamente.
  • Melhorias em várias partes: Agora é possível escrever um MultipartStreamProvider totalmente adaptado ao tipo de dados de várias partes do MIME que ele pode ler e apresentar o resultado da maneira ideal para o usuário. Você também pode enganchar uma etapa de pós-processamento no MultipartStreamProvider que permite que a implementação faça qualquer pós-processamento desejado nas partes do corpo de várias partes do MIME. Por exemplo, a implementação MultipartFormDataStreamProvider lê as partes de dados do formulário HTML e as adiciona a um NameValueCollection para que sejam fáceis de obter do chamador.
  • Melhorias na geração de link: O UrlHelper não depende mais de HttpControllerContext. Agora você pode acessar o UrlHelper de qualquer contexto em que o HttpRequestMessage esteja disponível.
  • Alteração da ordem de execução do manipulador de mensagens: Os manipuladores de mensagens agora são executados na ordem em que estão configurados em vez de em ordem inversa.
  • Auxiliar para conectar manipuladores de mensagens: O novo HttpClientFactory que pode conectar DelegatingHandlers e criar um HttpClient com o pipeline desejado pronto para ser usado. Ele também fornece funcionalidade para conectar-se com manipuladores internos alternativos (o padrão é HttpClientHandler), bem como fazer a fiação ao usar HttpMessageInvoker ou outro DelegatingHandler em vez de HttpClient como o invocador superior.
  • Suporte para CDNs em ASP.NET Otimização da Web: ASP.NET Otimização da Web agora fornece suporte para caminhos alternativos da CDN, permitindo que você especifique para cada pacote uma URL adicional que aponta para esse mesmo recurso em uma rede de distribuição de conteúdo. O suporte a CDNs permite que você obtenha seus pacotes de script e estilo geograficamente mais próximos dos consumidores finais de seus aplicativos Web. Os aplicativos de produção devem implementar um fallback quando a CDN não estiver disponível. Teste o fallback.
  • ASP.NET Web API rotas e configuração movidas para o método estático WebApiConfig.Register que pode ser reutilizado no código de teste. ASP.NET Web API rotas anteriormente foram adicionadas em RouteConfig.RegisterRoutes juntamente com as rotas MVC padrão. As rotas e a configuração de ASP.NET Web API padrão agora são tratadas em um método WebApiConfig.Register separado para facilitar o teste.

Problemas conhecidos e alterações interruptivas

  • A versão RC e RTM do ASP.NET MVC 4 retornou incorretamente as exibições da área de trabalho armazenadas em cache quando as exibições móveis devem ser retornadas.

  • Alterações interruptivas no Mecanismo de Exibição razor. Os seguintes tipos foram removidos de System.Web.Mvc.Razor:

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    Os seguintes métodos também foram removidos:

    • MvcCSharpRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator(System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
  • Quando WebMatrix.WebData.dll é incluído no diretório /bin de um ASP.NET aplicativos MVC 4, ele assume a URL para autenticação de formulários. Adicionar o assembly WebMatrix.WebData.dll ao seu aplicativo (por exemplo, selecionando "Páginas da Web do ASP.NET com sintaxe Razor" ao usar a caixa de diálogo Adicionar Dependências Implantáveis) substituirá o redirecionamento de logon de autenticação para /account/logon em vez de /account/login conforme esperado pelo padrão ASP.NET Controlador de Conta do MVC. Para evitar esse comportamento e usar a URL especificada já na seção de autenticação do web.config, você pode adicionar um appSetting chamado PreserveLoginUrl e defini-lo como true:

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • O gerenciador de pacotes NuGet falha ao instalar o ASP.NET MVC 4 para instalações lado a lado do Visual Studio 2010 e do Visual Web Developer 2010. Para executar o Visual Studio 2010 e o Visual Web Developer 2010 lado a lado com ASP.NET MVC 4, você deve instalar ASP.NET MVC 4 depois que ambas as versões do Visual Studio já tiverem sido instaladas.

  • A desinstalação ASP.NET MVC 4 falhará se os pré-requisitos já tiverem sido desinstalados. Para desinstalar corretamente ASP.NET MVC 4 você deve desinstalar ASP.NET MVC 4 antes de desinstalar o Visual Studio.

  • A instalação do ASP.NET MVC 4 interrompe ASP.NET aplicativos MVC 3 RTM. ASP.NET aplicativos MVC 3 que foram criados com a versão RTM (não com a versão ASP.NET Atualização de Ferramentas do MVC 3 ) exigem as seguintes alterações para trabalhar lado a lado com ASP.NET MVC 4. Criar o projeto sem fazer essas atualizações resulta em erros de compilação.

    Atualizações necessárias

    1. No arquivo de Web.config raiz, adicione uma nova <entrada appSettings> com a chave webPages:Version e o valor 1.0.0.0.

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. Em Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto e selecione Descarregar Projeto. Em seguida, clique com o botão direito do mouse no nome novamente e selecione Editar ProjectName.csproj.

    3. Localize as seguintes referências de assembly:

      <Reference Include="System.Web.WebPages"/> 
      <Reference Include="System.Web.Helpers" />
      

      Substitua-os pelo seguinte:

      <Reference Include="System.Web.WebPages, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
      <Reference Include="System.Web.Helpers, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      
    4. Salve as alterações, feche o arquivo do projeto (.csproj) que você estava editando e clique com o botão direito do mouse no projeto e selecione Recarregar.

  • Alterar um projeto do ASP.NET MVC 4 para 4.0 de 4.5 não atualiza a referência do assembly EntityFramework: Se você alterar um projeto do ASP.NET MVC 4 para o destino 4.0 depois de direcionar 4.5, a referência ao assembly EntityFramework ainda apontará para a versão 4.5. Para corrigir esse problema, desinstale e reinstale o pacote NuGet EntityFramework.

  • 403 Proibido ao executar um aplicativo ASP.NET MVC 4 no Azure depois de alterar para o destino 4.0 de 4.5: Se você alterar um projeto do ASP.NET MVC 4 para o destino 4.0 depois de direcionar para 4.5 e, em seguida, implantar no Azure, poderá ver um erro 403 Proibido em runtime. Para solucionar esse problema, adicione o seguinte ao seu web.config: <modules runAllManagedModulesForAllRequests="true" />

  • O Visual Studio 2012 falha quando você digita um '' em um literal de cadeia de caracteres em um arquivo Razor. Para contornar o problema, insira a aspa de fechamento do literal de cadeia de caracteres primeiro.

  • Navegar até "Conta/Gerenciar" no modelo de Internet resulta em um erro de runtime para as linguagens CHS, TRK e CHT. Para corrigir o problema, modifique a página para separar @User.Identity.Name colocando-a como o único conteúdo dentro da <marca forte> .

  • Não há suporte para provedores do Google e do LinkedIn nos Sites do Azure. Use provedores de autenticação alternativos ao implantar em Sites do Azure.

  • Ao usar UriPathExtensionMapping com o IIS 8 Express/IIS, você receberá erros 404 Não Encontrados ao tentar usar a extensão. O manipulador de arquivos estático interferirá nas solicitações para APIs Web que usam UriPathExtensionMappings. Defina runAllManagedModulesForAllRequests=true em web.config para contornar o problema.

  • O método Controller.Execute não é mais chamado. Todos os controladores MVC agora são sempre executados de forma assíncrona.