Tenho um aplicativo Web Api. Funcionou perfeitamente bem quando o testei usando o servidor de desenvolvimento de depuração VS 2010. Mas agora eu o implantei no IIS 7.5 e estou recebendo um erro HTTP 404 ao tentar acessar o aplicativo.
Aqui está meu web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="true" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
Respostas:
Eu também estava lutando contra isso. Felizmente, Steve Michelotti documentou uma solução que funcionou para mim aqui .
No final do dia, habilitei todos os verbos (verbo = "*") para o manipulador ExtensionlessUrlHandler-Integrated-4.0 em minha configuração da web.
Outros apontaram que ter o WebDAV habilitado causa problemas. Felizmente, também não tive esse problema.
fonte
*
. Tive que alterar o caminho para*
também para fazê-lo funcionar, pois*.
ainda causava o problemaTeve o mesmo problema. Esta definição de configuração resolveu o problema.
Conforme explicado em http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html, a solução acima deve ser evitada. Use isso. A mesma solução é fornecida pela Lopsided também. Mantendo-o aqui para permitir que os usuários evitem implementar a primeira solução de trabalho.
fonte
Se o IIS for instalado ou ativado após o ASP.NET, você precisará registrar manualmente o ASP.NET com o IIS para que seu aplicativo .NET funcione.
Para Windows 7 e anterior:
Para Windows 8 e posterior:
fonte
Você está executando o aplicativo Web API em um diretório virtual ou um aplicativo?
Por exemplo: Tive o mesmo problema quando movi meu projeto para o IIS local em Default Web Site> SampleWebAPI. Acredito que isso se deva à mudança no
URL
roteamento da seguinte forma:Original:
localhost:3092/api/values
Movido:
localhost/SampleWebAPI/api/values
Se você mover o projeto de API da Web para seu próprio site em execução em uma porta diferente, ele parece funcionar.
Observação adicional: compliquei ainda mais o problema adicionando
api
como o alias de um aplicativo em meu site que fazia com que o efetivoURL
fosse:localhost:81/api/api/values
- percebi isso depois de mover o site para seu próprio sitePortanto, como eu queria manter uma separação entre meu site e o site do projeto web api mvc, alterei as regras de roteamento
global.asax
da API Web "DefaultAPI" deapi/{controller}/{id}
para{controller}/{id}
e da ASP.NET MVCDefault
de{controller}/{id}
parainfo/{controller}/{id}
.fonte
IIS
comoapi
também. Isso causou toda essa depuração de tentativa e erro por mais de 2 horas. Muito obrigado por compartilhar sua experiência! Renomeou e agora estou de volta ao trabalho novamente. : DEsta é a única resposta que funcionou para mim ...
Eu tive um problema semelhante ... Parecia que, independentemente do que eu fizesse, nada estava sendo redirecionado e meu arquivo global estava apenas sendo ignorado. Eu considerei seriamente terminar tudo antes de encontrar essa resposta. Espero que este link ajude mais alguém.
Adicionar o seguinte ao arquivo web.config funcionou para mim:
A tag system.webServer já estava lá, é claro, mas eu adicionei a tag modules a ela e, em seguida, remova e adicione tags à tag de módulos.
fonte
Algumas coisas para verificar:
fonte
Eu tive um problema parecido. Eu tinha as configurações corretas no meu arquivo web.config, mas estava executando o pool de aplicativos no modo Clássico em vez do modo Integrado
fonte
Esse problema também pode ocorrer devido ao seguinte
1. No Web.Config
2. Certifique-se de que o seguinte esteja disponível na pasta bin no servidor onde a API da Web está implementada
System.Net.Http
System.Net.Http.Formatting
System.Web.Http.WebHost
System.Web.Http
Esses assemblies não serão copiados na pasta bin por padrão se a publicação for por meio do Visual Studio, porque os pacotes de API da Web são instalados por meio do Nuget na máquina de desenvolvimento. Ainda assim, se você deseja que esses arquivos estejam disponíveis como parte da publicação do Visual Studio, você precisa definir CopyLocal como True para esses assemblies
Sadish Kumar.V
fonte
Com base nesta resposta SO , eu só tive que mudar
path="*."
parapath="*"
para o agregadoExtensionlessUrlHandler-Integrated-4.0
emconfiguration>system.WebServer>handlers
na minhaweb.config
Antes:
Depois de:
fonte
Eu também tive esse problema. Resolvi o problema acessando Pools de aplicativos> Nome do pool de aplicativos e alterei o .NET Framework da versão v.2.0.50727 para v4.0.30319.
fonte
Tive que desabilitar a opção de publicação de arquivo "Pré-compilar durante a publicação".
fonte
Existe uma correção oficial da microsoft: http://support.microsoft.com/kb/980368
NÃO recomendo enfaticamente o uso de <modules runAllManagedModulesForAllRequests = "true">. Isso faz com que todas as solicitações (mesmo .jpg, .css, .pdf, etc) sejam processadas por todos os módulos HTTP registrados. Existem dois momentos negativos: a) carga adicional nos recursos de hardware; b) possíveis erros, pois os módulos http irão processar novo tipo de conteúdo.
fonte
Comecei a obter respostas 404 da API Web depois de seguir um tutorial do Windows Azure que me disse para adicionar um arquivo "WebRole.cs" ao meu projeto.
Depois de remover "WebRole.cs" do meu projeto, minhas chamadas de API da Web começaram a funcionar novamente.
fonte
Certifique-se de que o pool de aplicativos esteja no modo integrado
e adicione o seguinte ao arquivo web.config:
fonte
No meu caso, o problema era simplesmente que eu estava tentando acessar o site em
myserver.myintranet.com/mysite
Mas a associação do site para http no IIS não tinha o nome do host especificado na associação. Tinha funcionado antes e eu não tenho ideia de como isso explodiu.
Uma vez que eu coloquei
myserver.myintranet.com
o nome do host, o 404 havia desaparecido.No Gerenciador do IIS, você vai para Ligações ... no painel de ações e edita a ligação http para especificar o nome do host.
fonte
Não se esqueça de implantar global.asax
fonte
Tive o mesmo problema, uma resposta 404 para os controladores da API da web quando servidos a partir do IIS, mas tudo funcionou bem no VS2010. Nenhuma das soluções acima funcionou para mim. Acabei descobrindo que o problema era que adicionamos o suporte WSE 3.0 para o aplicativo e a dll Microsoft.Web.Services3 estava faltando no diretório / bin do aplicativo. Estranho, mas depois de copiar a dll, o mapeamento de rotas começou a funcionar.
fonte
Para mim, o problema era que o site raiz foi configurado para usar um pool de aplicativos .NET 2.0, e meu aplicativo dentro desse site era .NET 4.5.
Eu criei um novo site com um pool de aplicativos .NET 4 e coloquei meu aplicativo na raiz - e funcionou bem.
fonte
Eu lutei com isso também. Meu problema exato era que eu tinha um ASMX Web Service que, quando inseri um parâmetro em um método da web e o testei, ele me deu o 404. O método específico funcionou bem no passado e não foi alterado, apenas republicado. Então eu cheguei aqui e tentei todas as respostas postadas e nada ajudou.
Minha solução final? Eu sei que isso é drástico, mas acabei de criar uma nova solução do Visual Studio e um projeto da web. Selecionei MVC, então fiz um "Add"> "New Item", selecionei "Visual C #"> "Web" e "Web Service (ASMX)" abaixo disso. Copiei todo o meu código code-behind antigo, anotei o namespace fornecido ao novo arquivo em meu novo projeto, colei todo o meu código antigo no novo arquivo code-behind no novo projeto e coloquei o namespace de volta ao que tinha sido.
Em seguida, criei minhas pastas em meu projeto que tinha antes de usar o Visual Studio para fazer "Adicionar"> "Nova pasta", copiei de volta em meus arquivos para as pastas de meu outro projeto usando o Windows Explorer e cliquei com o botão direito em cada pasta em O Visual Studio fez "Adicionar"> "Item Existente ..." e puxou os itens dessas pastas para as pastas do Visual Studio do meu novo projeto. Referenciei todos os meus assemblies .NET novamente, tendo ambos os projetos abertos para que eu pudesse comparar aqueles que havia referenciado anteriormente (havia vários). Tive que nomear meu novo projeto um pouco diferente - basicamente fiz algo comparável a "GeneralWebApp" em vez de "MyWebApp", por exemplo - então tive que fazer um "Substituir tudo" em toda a minha solução para substituir esse nome,
Então eu fiz um "Rebuild All" no projeto, em seguida, iniciei com o botão "Play" que o Visual Studio fornece quando eu o construo corretamente. Funcionou bem. Então eu publiquei e estava tudo bem no servidor onde eu publiquei, quando eu executei de lá. Não tenho explicação sobre o que aconteceu, mas foi assim que consegui superar. Não é um teste ruim apenas para ver se algo que o Visual Studio está fazendo estragou tudo.
fonte
Se você colocar apenas a pasta bin no IIS (após a construção do projeto), este problema também ocorrerá. Nessa situação, você deve publicar o projeto usando o VisualStudio e, em seguida, colocar a pasta publicada no IIS.
fonte
Que tipo de solicitação HTTP você está fazendo?
Esta é uma resposta um pouco à esquerda, mas você já tentou remover a página de erro padrão do IIS para 404 para verificar o que sua API está realmente retornando?
Tive um problema em que queria que um método de controlador retornasse um 404 quando postei a id incorreta nele. Descobri que sempre recebia a página "Arquivo ou diretório não encontrado" do IIS 404, em vez da resposta HTTP da minha API. Remover a página de erro 404 padrão resolveu o problema.
Problema diferente, mas você nunca sabe, pode ajudar;)
fonte
Este pedaço de configuração no arquivo web.config pode me ajudar conforme me ajudou: na seção system.webServer:
fonte
Recentemente, tive um erro 404 não encontrado com todas as minhas rotas / controladores Web Api 2. Então, entrei no servidor real e tentei navegar usando localhost em vez do nome do host e obtive "404.7 Not Found - O módulo de filtragem de solicitações está configurado para negar a extensão do arquivo".
Este post me ajuda a resolver isso.
fonte
Foi resolvido para mim, quando eu habilito a caixa de seleção para UrlRoutingModule-4.0:
Gerenciador do IIS> Módulos> selecione UrlRoutingModule-4.0> Editar Módulo> marque a caixa de seleção "Chamar apenas para solicitações de aplicativos ASP.NET ou manipuladores gerenciados".
fonte
Eu tive o mesmo problema: em uma máquina recém-instalada com o Visual Studio 2013, o projeto da API da web estava trabalhando no IISExpress, mas não no IIS local. Tentei de tudo que pude encontrar, mas no final o problema não era necessário com a API Web, mas com o MVC: mesmo instalado, nenhum projeto MVC estava rodando.
O que funcionou para mim foi desinstalar o IIS (em ADD / REMOVE Windows Features), reinstalá-lo e executar aspnet_regiis -i. Talvez isso ajude outra pessoa.
fonte
Passei muito tempo tentando várias coisas para finalmente perceber que estava adicionando meu aplicativo da web não em Sites / Sites padrão, mas em outro site vinculado a outra porta. Obviamente, tentar localhost na porta 80 resultaria em 404.
fonte
Eu não faço nada, apenas adiciono esta tag no web.config, está funcionando. Esse problema surge em um dos seguintes pontos
Use Web Api no mesmo projeto usando formulários MVC ou asp.net
Use RouteConfig e WebApiConfig em Global.asax como GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);
Use RouteConfig para 2 finalidades, formulários asp.net usando com friendlyurl e roteamento mvc para roteamento MVC
acabamos de usar essa tag no web.config, vai funcionar.
fonte
Teve o mesmo problema com a API Web e a API Web .Net Core. Funcionou bem no VS 2017 durante a depuração, mas retornou 404 quando publicado no IIS 7.5. A solução para mim foi mudar a forma como criei o site. Em vez de publicar na raiz de um site (criado clicando com o botão direito em Sites ... Adicionar site), tive que criar um aplicativo (criado clicando com o botão direito em um site ... Adicionar aplicativo) e publicá-lo nessa pasta. Observe que, para a versão Core, tive que alterar a configuração da versão do .NET Framework do pool de aplicativos para "Nenhum código gerenciado".
fonte
Para mim, a solução foi remover as seguintes linhas do meu arquivo web.config:
Percebi que o VS os adicionou automaticamente, não sei por que
fonte
Tente este webconfg .. substitua "NewsApi.dll" por sua dll principal!
fonte