0

我有一個使用JavaScript編寫的單頁面應用程序,我使用HTML5歷史API來處理客戶端的URL。這意味着發送到服務器的任何URL都應該使服務器呈現相同的頁面。ASP.NET Core中的單頁面應用程序路由

在ASP.NET MVC 5我寫了這個代碼來做到這一點:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     // ... 
     routes.Add(new Route("{*path}", new MyRouteHandler())); 
    } 
} 

public class MyRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     return WebPageHttpHandler.CreateFromVirtualPath("~/index.cshtml"); 
    } 
} 

這個工作非常出色。無論服務器獲取什麼URL,都會呈現index.cshtml。請注意,我可以使用.cshtml文件(而不是.html文件),這意味着我可以使用一些C#代碼動態更改包含的.js腳本,將版本號附加到.css文件等等。更重要的是,我不需要實現控制器和視圖等來呈現這個.cshtml文件。

現在我們來回答這個問題:您如何在ASP.NET Core中執行此操作?我一直在閱讀文檔,但是我沒有看到如何在不添加控制器類,查看文件夾和其他rigmarole的情況下呈現.cshtml文件。

任何人都知道ASP.NET Core中的等效代碼?

+0

新年快樂http://stackoverflow.com/questions/40358179/use-asp-net-core-without-mvc – ergen

回答

1

當前在ASP.NET Core中運行CSHTML頁面的「正常方式」需要使用ASP.NET Core MVC。

但是,正在開發的計劃功能與ASP.NET(非核心)網頁有些類似,您可以在其中擁有獨立的CSHTML文件。該功能正在跟蹤中:https://github.com/aspnet/Mvc/issues/494(並且就新功能的命名而言,此處正在跟蹤該功能:https://github.com/aspnet/Mvc/issues/5208)。

還有一個如何將MVC視圖渲染爲字符串(例如生成電子郵件,報告等)的示例,並且該示例在此處可用:https://github.com/aspnet/Entropy/tree/dev/samples/Mvc.RenderViewToString 但是,要在描述的場景中使用此示例,你必須做一些額外的管道工程來將它連接起來作爲自己的中間件(不是很多管道;只是一點!)。

同樣值得注意的是,在你的場景中,你可能不希望所有的網址都進入這個視圖,因爲你仍然需要首先運行的靜態文件中間件來處理CSS,JS,圖像和其他靜態內容。想必您只是想讓所有其他網址轉到此動態視圖。

相關問題