Como faço para JS saber sobre a raiz do aplicativo?

Eu tenho algum javascript que é referenciamento /jobs/GetIndex em um projeto MVC. Isso funciona muito bem quando eu o executo localmente porque tenho um Controller chamado JobsController . Quando eu implantar, implantei o aplicativo em uma subpasta ‘Jobs’, o que significa que o URL deve se tornar http://site/jobs/jobs/GetIndex mas vai para http://site/jobs/GetIndex , presumo porque o javascript não sabe qual é o ‘URL raiz’ e usa o site como raiz. Como posso fazê-lo funcionar nos dois ambientes?

Se você simplesmente se preocupa em obter o URL raiz / base do site para poder adicioná-lo para obter o outro URL que procura, você pode simplesmente usar / como o primeiro caractere do seu URL.

 var urlToJobIndex2= "/jobs/GetIndex"; 

Aqui está uma abordagem alternativa se você quiser mais do que apenas a raiz do aplicativo (Ex: URLs específicas (criadas usando methods auxiliares mvc, como Url.RouteUrl etc)

Você pode usar o método auxiliar Url.Content na sua visualização de razor para gerar a URL para a base do aplicativo, atribuí-la a uma variável javascript e usá-la em seu outro código js para construir suas outras URLs. Certifique-se sempre de usar o namespace javascript ao fazer isso para evitar possíveis problemas com variables ​​javascript globais.

Se você deseja obter o URL para um método de ação específico, use os methods auxiliares Url.RouteUrl ou Url.RouteUrl .

Então, em sua visão de razor ( arquivo de layout ou visão específica ), você pode fazer isso.

   

E no seu arquivo PageSpecificExternalJsFile.js , você pode lê-lo como

 var urlToJobIndex= myApp.Urls.jobIndexUrl; // Or With the base url, you may safely add the remaining url route. var urlToJobIndex2= myApp.Urls.baseUrl+"jobs/GetIndex"; 

Aqui está uma resposta detalhada sobre o mesmo, mas usando isso em uma página / visão específica

Angular Js

Você pode precisar da (s) URL (s) relativa (s) correta (s) em seu controlador / serviços / diretivas angulares. A mesma abordagem também funcionará para o seu código angular. Simplesmente construa o object de espaço de nomes js e use o provedor de value angular para passar os dados para seus controladores / serviços / diretivas angulares conforme explicado nesta postagem em detalhes com código de exemplo.

Adicione à sua tag head. Ele irá especificar a raiz.

Isso é explicado aqui https://docs.angularjs.org/guide/ $ location