2014-07-16 13 views
17

Tôi đang cố tạo một ứng dụng web trang đơn kết hợp cả ASP.NET WebAPI và trình tạo Yeoman Angluarjs. Hiện nay tôi có một cấu trúc dự án như trình bày dưới đâyLàm cách nào để thay đổi đường dẫn gốc của ứng dụng ASP.Net WebAPI?

|-- yeomanAngularApp |-- app |-- dist |-- scripts |-- index.html |-- etc... |-- WebApiApp |-- App_Start |-- bin |-- Content |-- Controllers |-- Models |-- WebApiApp.csproj |-- dist |-- scripts |-- index.html

Khi tôi muốn xây dựng các ứng dụng phân phối, sao chép thư mục dist trong yeomanAngularApp vào WebApiApp thay thế thư mục dist trong đó.

Bây giờ việc này rất dễ thực hiện. Những gì tôi thực sự sau đó muốn làm là để nói cho các WebApiApp không sử dụng WebApiApp\ làm gốc của dự án, nhưng sử dụng WebApiApp\dist. Điều này có nghĩa là thay vì đi đến số http://localhost/dist/index.html, tôi có thể truy cập http://localhost/index.html mặc dù index.html nằm trong thư mục dist. Ngày đầu này tôi cũng muốn định tuyến WebAPI của tôi cho các bộ điều khiển để chơi độc đáo quá.

Tôi đã tìm kiếm một lúc và dường như tôi không thể tìm thấy câu trả lời. Điều tốt nhất tôi có thể nghĩ ra, là sử dụng viết lại URL, điều mà tôi không cảm thấy đúng.

+0

tùy thuộc vào cách bạn đang phân phối ứng dụng của mình. bạn đang sử dụng iis? –

+0

@ rik.vanmechelen yep. Tôi đang phục vụ ứng dụng bằng cách sử dụng IIS –

Trả lời

24

Viết lại URL chính xác là những gì bạn muốn, với khối điều kiện để kiểm tra xem tệp có tồn tại không. Nội dung trong thư mục dist của bạn tĩnh (ví dụ: cuộc sống trên hệ thống tệp) nhưng các tuyến đường WebApiApp là động. Vì vậy, bạn chỉ cần kiểm tra xem tuyến đường có khớp với một tệp tồn tại trong thư mục dist hay không, nếu không đơn giản là hãy để .NET xử lý tuyến đường. Thêm dòng sau vào file Web.config của bạn trong phần <system.webServer> nên làm các trick:

<rewrite> 
    <rules> 
    <rule name="static dist files" stopProcessing="true"> 
    <match url="^(.+)$" /> 
    <conditions> 
     <add input="{APPL_PHYSICAL_PATH}dist\{R:1}" matchType="IsFile" /> 
    </conditions> 
    <action type="Rewrite" url="/dist/{R:1}" /> 
    </rule> 
    <rule name="index.html as document root" stopProcessing="true"> 
     <match url="^$" /> 
     <action type="Rewrite" url="/dist/index.html" /> 
    </rule> 
    </rules> 
</rewrite> 

Nguyên tắc thứ hai là không bắt buộc nhưng nó có nghĩa là một yêu cầu đối với thư mục gốc của trang web của bạn vẫn sẽ phục vụ các tập tin index.html từ thư mục dist, hiệu quả làm cho thư mục gốc của dự án WebApiApp\dist nhưng vẫn cho phép tất cả định tuyến WebAPI.

+0

Wow Seb, đã làm việc rất đẹp, đây là một giải pháp tuyệt vời cho vấn đề này! –

+0

Nếu tôi muốn thay đổi url của mình '/dist/admin/index.html' thành '/ admin', làm cách nào tôi có thể thực hiện việc này? –

Các vấn đề liên quan