Erro 404 - File or directory not found WebAPI no servidor
Estou desenvolvendo uma WebAPI onde irá retornar alguns registros e fazer insert etc. Quando realizo testes no servidor local em minha máquina, as rotas funcionam corretamente, mas quando eu faço a publicação em um domínio na LocaWeb o mesmo começa a apresentar o erro abaixo.
Realizei várias modificações conforme orientação de alguns blogs, mas não obtive resultado. Alguém já passou por esse problema na publicação de uma WebAPI?
A url ficou da seguinte forma http://meudominio/api/place/getPlace, da mesma forma dos testes realizado na máquina local.
terça-feira, 19 de janeiro de 2016 13:38
Paulo, verifica como esta configurado seu servidor na LocaWeb, dependendo dos servidores existem dois modos de publicação:
WebSite > onde existe a pasta wwwroot
WebApp > onde existe a pasta wwwapp
No seu caso é bom publicar em servidores com configurações de WebSite.
O problema também pode acontecer com o tipo de retorno da sua aplicação, navegando em protocolo HTTP o correto seria:
//DEVEMOS FAZER UMA ANOTAÇÃO NO CABEÇALHO DE CADA METODO
//INFORMANDO QUAL O MÉTODO HTTP SERÁ USADO PARA A REQUISIÇÃO.
//COMO PATTERN PARA UMA WEBAPI DEVEMOS SEMPRE RESPONDER AS SOLICITAÇÕES EXTERNAS COM HTTPRESPONSEMESSAGE
//POIS ASSIM CRIAMOS UM PADRÃO DE RESPONTA USANDO O PROTOCOLO COMPO BASE PARA RESPOTA.
public HttpResponseMessage TestandoGet()
//CRIAMOS UMA RESPOSTA COM O 'CreateResponse' E EM SEGUIDA PASSAMOS OS PARAMETRO DE STATUS HTTP DE RESPOSTA DA SOLICITAÇÃO
//E OBJETO A SER RETORNADO
HttpStatusCode.NotFound, "Retorno do GET OK");
Caso deseje efetuar alguns testes com o retorno de sua aplicação, tenho um exemplo:
https://github.com/JeanLLopes/WebAPI-Route-Translate-BasicAuth
Sugerido como Resposta Jean LLopes terça-feira, 19 de janeiro de 2016 15:10
terça-feira, 19 de janeiro de 2016 15:10
Verifiquei no servidor e não achei nada de diferente, mas tenho o caminho físico do servidor. Abaixo estou colocando o caminho físico do servidor, mas não sei o quanto isso pode prejudicar no funcionamento da WebAPI. Sou novo no desenvolvimento de WebAPI.
\\windows-pd-0001.fs.locaweb.com.br\WNFS-0001\meudominio\web
A api fica dentro da pasta web, onde eu fiz a publicação via FTP pelo próprio visual studio 2015. Na API a rota está configurada sobre o método da seguinte forma "api/place/getPlace" (Exemplo), mas quando tento acessar essa rota pelo navegador ou um outro aplicativo de teste de REST, eu uso a seguinte url http://meudominio/api/place/getPlace (Exemplo).
Na minha máquina local eu uso apenas http://localhost:porta/api/place/getPlace e funciona normalmente.
O caminho físico interfere na configuração da rota?
terça-feira, 19 de janeiro de 2016 17:24
Paulo, problema pode também ocorrer devido ao bloqueio de solicitações Cross Origin de sua API, tente habilitar o Cross Origin na sua aplicação, pois ela pode estar bloqueando o acesso de maquinas externa, veja como habilitar e mais informações abaixo:
No seu caso, para testes iniciais efetue essa configuração para liberar todos os tipo de acesso, posteriormente efetue os bloqueios:
Sobre o caminho fisico interferir na caminho da aplicação, imagino que no seu caso não
Sugerido como Resposta Jean LLopes terça-feira, 19 de janeiro de 2016 20:51
Editado Jean LLopes terça-feira, 19 de janeiro de 2016 20:53
terça-feira, 19 de janeiro de 2016 20:51
Realizei as alterações conforme você sugeriu, mas não tive resultado. O erro ainda continua a acontecer.
O servidor é Windows 2012. Isso muda alguma coisa?
quarta-feira, 20 de janeiro de 2016 02:51
Bem amigo, talvez esses links possam lhe ajudar:
http://stackoverflow.com/questions/15556035/all-asp-net-web-api-controllers-return-404
Sugerido como Resposta Jean LLopes quarta-feira, 20 de janeiro de 2016 10:43
quarta-feira, 20 de janeiro de 2016 10:43
Fiz os testes conforme os links que você passou, mas também não funcionou. Poderia ser talvez a rota na minha classe?
Segue abaixo a minha classe de rota da controller:
formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
quarta-feira, 20 de janeiro de 2016 22:39
Já consegui resolver o problema de rota com a locaweb, mas agora está apresentando o erro abaixo. Eles disseram que é devido a minha aplicação estar rodando como FULL TRUST e o servidor deles são MEDIUM TRUST.
Sabe me dizer como se configura isso?
quarta-feira, 20 de janeiro de 2016 23:33
Como você conseguiu resolver o problema 404 da API?
Estou passando pela mesma dificuldade e a 2 dias venho tentando tudo que encontro em blogs e grupos de discussões mas sem sucesso.