Inquiridor
Erro 404 - File or directory not found WebAPI no servidor

Pergunta
-
Bom dia!
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.
Todas as Respostas
-
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. [HttpGet] //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 return Request.CreateResponse( 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
If the answer was helpful vote / mark as answered
Se a resposta foi útil vote / marque como respondido
- Sugerido como Resposta Jean LLopes terça-feira, 19 de janeiro de 2016 15:10
-
Jean, boa tarde!
Obrigado pela resposta.
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?
Obrigado.
Att.
-
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:
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
No seu caso, para testes iniciais efetue essa configuração para liberar todos os tipo de acesso, posteriormente efetue os bloqueios:
[EnableCors(origins: "*", headers: "*", methods: "*")]
Sobre o caminho fisico interferir na caminho da aplicação, imagino que no seu caso não
If the answer was helpful vote / mark as answered
Se a resposta foi útil vote / marque como respondido
- 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
-
-
Bem amigo, talvez esses links possam lhe ajudar:
http://stackoverflow.com/questions/9703090/http-404-page-not-found-in-web-api-hosted-in-iis-7-5
http://stackoverflow.com/questions/15556035/all-asp-net-web-api-controllers-return-404
If the answer was helpful vote / mark as answered
Se a resposta foi útil vote / marque como respondido
- Sugerido como Resposta Jean LLopes quarta-feira, 20 de janeiro de 2016 10:43
-
Jean, boa noite!
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:
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
var formatters = config.Formatters;
formatters.Remove(formatters.XmlFormatter);
var jsonSettings = formatters.JsonFormatter.SerializerSettings;
jsonSettings.Formatting = Formatting.Indented;
jsonSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.MapHttpAttributeRoutes();
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultRoute",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
} -
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?
[SecurityException: Request failed.] System.Security.CodeAccessSecurityEngine.ThrowSecurityException(RuntimeAssembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed) +166 System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Object assemblyOrString, PermissionSet granted, PermissionSet refused, RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand, IPermission permThatFailed) +100 System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandleInternal rmh, Object assemblyOrString, SecurityAction action, Boolean throwException) +272 System.Security.CodeAccessSecurityEngine.CheckSetHelper(CompressedStack cs, PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandleInternal rmh, RuntimeAssembly asm, SecurityAction action) +55 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) +0 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) +70 System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) +39 System.Type.GetType(String typeName) +32 System.CodeDom.Compiler.CompilerInfo.get_IsCodeDomProviderTypeValid() +10 System.Web.Compilation.CompilationUtil.GetRecompilationHash(CompilationSection ps) +2085 System.Web.Configuration.CompilationSection.get_RecompilationHash() +107 System.Web.Compilation.BuildManager.CheckTopLevelFilesUpToDateInternal(Int64 cachedHash) +465 System.Web.Compilation.BuildManager.CheckTopLevelFilesUpToDate(Int64 cachedHash) +51 System.Web.Compilation.BuildManager.ExecutePreAppStart() +132 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +521
-