0

Angular2 SPA에서 작동하도록 Visual Studio 2017 ASP.NET Core 1.1 솔루션을 설정하려고합니다.ASP.NET Core 1.1 내 TypeScript에서 웹 API 메서드 URL을 올바르게 계산하는 방법 해결책?

npm install -g yo generator-aspnetcore-spa 
yo aspnetcore-spa 

을하고 비주얼 스튜디오 2017 커뮤니티 에디션에 오픈 :

가 나는 다음 명령을 사용하여 샘플 csproj을 만들었습니다.

IIS Express 10을 실행하면 잘 작동합니다 (라우팅, 새로 고침, 웹 API 호출). IIS에서 웹 응용 프로그램 내에서 배포 할 때, 웹 API 호출로 인해 경로를 포함하지 않는 웹 응용 프로그램 이름에 실패이 잘 작동

constructor(http: Http) { 
    http.get('/api/SampleData/WeatherForecasts').subscribe(result => { 
     this.forecasts = result.json() as WeatherForecast[]; 
    }); 
} 

:

fetchdata.component.ts 파일을 다음과 같이 데이터를 가져 오기 정의 IIS Express에서 경로 http://localhost:port/api/SampleData/WeatherForecasts이 올바른지 확인하십시오. URL에서

http://localhost:port/ApplicationName/api/SampleData/WeatherForecasts 

하드 코딩 응용 프로그램 이름이 작동하지만이 가능한 솔루션되지 않습니다 : 그러나, 올바른 경로이기 때문에이 IIS에서 실패합니다.

나는 제대로 설정 기본 (경로)에 _Layout.cshtml을 변경,하지만 작동하지 않습니다

<!DOCTYPE html> 
@{ 
    string basePath = Url.Content("~"); 
} 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
     <title>@ViewData["Title"] - WebApplicationBasic</title> 
     <base href="@basePath" /> 
     <link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" /> 
    </head> 
    <body> 
     Base path: @basePath 

     @RenderBody() 

     @RenderSection("scripts", required: false) 
    </body> 
</html> 

내가 제대로 이해하면 경로가 외부에 배치되어 tsconfig.json 파일에 상대적으로 간주됩니다 wwwroot 폴더. 그러면 ts에서 생성 된 js의 모든 경로가 웹 응용 프로그램 폴더를 고려하지 않는 이유를 설명 할 수 있습니다.

질문 : TypeScript 파일을 사용하는 호출에 URL 접두어를 어떻게 동적으로 지정할 수 있습니까?

답변

1

절대 경로 대신 상대 경로를 사용해야합니다. http.get(...) 전화에서 /을 삭제하면됩니다.

이미 기본 경로를 올바르게 설정 했으므로 (<base href="~/"/>을 사용하면 더 쉽게 작동합니다). 이렇게하면 기본 경로가 항상 상대 URL의 시작점으로 사용됩니다. 이것은 ajax 호출에도 적용됩니다. 새로운 브라우저는 모두 이미 <base href=""/>을 지원합니다. 또한 내 전직 here 게시물을 참조하십시오.

+0

예, 작동합니다. 고맙습니다! 내 코드에는 두 가지 실수가있었습니다. '는 '또는 '이어야하고 당신이 언급 한 것처럼 여분의'/'. – Alexei