none
Erro 404 - File or directory not found WebAPI no servidor RRS feed

  • 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.

     

    terça-feira, 19 de janeiro de 2016 13:38

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
    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.

    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:

    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
    terça-feira, 19 de janeiro de 2016 20:51
  • Jean, boa noite!

    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?

    Obrigado.

    Att.

    quarta-feira, 20 de janeiro de 2016 02:51
  • 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
    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);
            }
        }

    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?

    [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

    quarta-feira, 20 de janeiro de 2016 23:33
  • Olá, Paulo...

    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.

    quinta-feira, 3 de março de 2016 12:39