2015-01-19 25 views
14

Çok basit bir SPA stili uygulama geliştiriyorum ve jilet kullanmak istemiyorum, bu yüzden sadece HTML dosyalarını (wwwroot klasöründen) sunmak için ihtiyacım var. js benim API denetleyicileri çağırır. Web API 2'de yönlendiricinin HTML dosyalarını görmezden gelmesini sağlayabilirsiniz; http://www.strathweb.com/2014/04/ignoring-routes-asp-net-web-api/ IgnoreRoute işlevselliği sırf uygulanması ya da değiştirildi değil: Bu örneğe benzerMVC6'daki yolları nasıl yok sayma

config.Routes.IgnoreRoute("Html", "{whatever}.html/{*pathInfo}"); 

?

Şu anda app.UseMvc(); Benim Startup.cs herhangi isteği "/" Bana bu durum alır olsun:

An unhandled exception occurred while processing the request. 
InvalidOperationException: The view 'Index' was not found. The following  locations were searched: 
/Views/Home/Index.cshtml 
/Views/Shared/Index.cshtml. 
Microsoft.AspNet.Mvc.Rendering.ViewEngineResult.EnsureSuccessful() 

Ama MVC olmadan ayrılırken size "/" talep index.html dosyasını vermektedir - Açıkçası benim API denetleyicileri o zaman işe yaramayacak.

+1

ne bu yorumun dışında app.UseMvc() sorunsuz çalışıyor zaman demek istiyorsunuz ama sonra web api elbette işe yaramaz anlamıyorum? Buraya bir örnek kod verebilir misiniz? Benim wwwroot klasöründe – dotnetstep

+0

Benim index.html dosyası var, eğer MVC herhangi bir istek/html dosyası için herhangi bir isteğini devre dışı bırakırsam, uygulama isteğimde MVC'yi etkinleştirdiğimde/istisnasıyla sonuçlanır: InvalidOperationException: 'Index' görünümü bulunamadı. Aşağıdaki konumlarda arama yapıldı: /Views/Home/Index.cshtml /Views/Shared/Index.cshtml. –

+1

Bu nedenle, Index.html, MVC etkinleştirildiğinde bile sunulmasını istersiniz. Düşünceme göre Sorununuzla ilgisi yok çünkü siteyi IIS'de barındırıyorsanız ve index.html'yi varsayılan sayfa olarak yapıyorsanız, o zaman hizmet verecek. – dotnetstep

cevap

14

MVC seçeneğiniz etkinken bile index.html sunucusuna hizmet etmek istiyor musunuz? Eğer öyleyse, bir ayarı değiştirmeniz gerekir.

MVC'yi etkinleştirdiğinizde, URL'niz http://localhost:yourport şeklindeyken Ana/Dizini aramak için varsayılan bir yol eklenmiştir.

MVC'yi devre dışı bıraktığınızda, bu durumda rota bulunmadığından index.html'ye hizmet edecektir.

MVC etkinleştirildiğinde index.html hizmetini vermek isterseniz, MVC kullanmadan önce Configure işlevinde aşağıdakini ekleyin.

app.UseDefaultFiles(new Microsoft.AspNet.StaticFiles.DefaultFilesOptions() { DefaultFileNames = new[] { "index.html" } }); 
// your UseMVC goes here. 
+0

Bu mükemmel çalışıyor! Bu, Web API 2.0 ile karşılaştırıldığında, bunu düzeltmenin çok farklı bir yolu. –

+4

IgnoreRoute henüz hazır değil. Yakın gelecekte bir noktada çevrimiçi olacak, bu yüzden statik dosyalar middleware olmadan çalışacaktır. Elbette bunu kullanmakta yanlış bir şey yok, sadece işlevselliğin gitmediğini unutmayın, henüz henüz uygulanmadı, –

+1

Sipariş çok önemli. Yukarıdaki iş için bu siparişi kullandım. 'app.UseDefaultFiles(); app.UseStaticFiles(); app.UseMvc(); ' –

14
public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    app.UseDefaultFiles(); 
    app.UseStaticFiles(); 
    app.UseMvc(); 
} 
+1

Bu benim için MVC 6 (9/5/2015) – Anonymous

+1

son geçerli sürümü ile çalıştı Microsoft.AspNet.StaticFiles (Teşekkürler Resharper!) –

+0

paketi eklemek gerekiyordu Bu görünmüyor NET Core RC2 ile MVC 6'da benim için çalışıyor. .NET Core RC2 sürümü var mı? – Samir

İlgili konular