2017-09-19 6 views
0

私はシングルページクライアントでMVCコアアプリケーションをビルドします。すべてのサブルートに静的ファイルを提供

私は/api/...のいくつかのルートを正しく設定しました。また、私はいくつかのルートの静的ファイルを提供したい。例えば:については

  • 私はについて/Home/index.html
  • を受信したい/Home/のすべてサブルート/App/のすべてサブルート私は/App/index.html

を受信したい私はConfigure()app.UseStaticFiles()を追加しました/Home/index.htmlにアクセスできますが、他のサブルートでは機能しません。

何が欠けていますか?

+0

asp.netコア2.0を使用している場合は、静的ページのRazorページを試してください。 https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/index?tabs=visual-studio – Ahmar

+0

@Ahmar私はRazor Pagesを知っていますが、どのように役立つか分かりません。私はツールで生成されたHTMLファイルを取得し、余分なコントローラなどを避けたい – Koopakiller

答えて

1

ルーティングシステムを属性ルーティングに変更しました。なかでも私がHomeControllerを追加しました:

[Route("")] 
public class HomeController : Controller 
{ 
    [Route("")] 
    public IActionResult Index() 
    { 
     return View(); // The Home-page 
    } 

    [Route("Error")] 
    public IActionResult Error() 
    { 
     // show an error page 
     return Content(Activity.Current?.Id?.ToString() ?? HttpContext.TraceIdentifier.ToString()); 
    } 

    [Route("{client}/{*tail}")] 
    [Produces("text/html")] 
    public IActionResult ClientApp(string client, string tail) 
    { 
     // show a client app 
     try 
     { 
      return new ContentResult() 
      { 
       Content = System.IO.File.ReadAllText($"./wwwroot/{client}/index.html"), 
       ContentType = "text/html" 
      }; 
     } 
     catch 
     { 
      return RedirectToAction("/Error"); 
     } 
    } 
} 

私のクライアントアプリケーションは、wwwrootの内部に独自のフォルダ(clientルーティング部分)の内側index.htmlファイルを持っていました。要求が/something/...にアクセスしようとすると、ClientAppのルートはクライアントアプリケーションのフォルダ名としてsomethingと一致し、index.htmlがクライアントに送信されます。リダイレクトはなく、URLは同じままです。

は、それはあなたがStartupAddMvcUseStaticFilesを追加する場合、静的ファイルで問題ない:ASP.NET MVCコア2.0でテスト

app.UseStaticFiles(); 
app.UseMvc(); 

関連する問題