2012-02-17 26 views
15

MVC ve Yönlendirme konusunda oldukça yeni ve bir uygulamayı farklı URL'leri kullanmak üzere değiştirmem istendi. deneyimim olmadığından benden biraz fazla olan bir görev.ASP.NET MVC Yönlendirme - rotalara .html uzantısını ekleyin

Tamam, kod biraz konuşmak sağlar:

routes.MapRoute(
"CategoryBySeName", // Route name 
"products/{SeName}", // URL with parameters 
new { controller = "Catalog", action = "CategoryBySeName" } 
); 

bu beklenen, ancak daha sonra müşteri yollarının sonundaki ".html" istedi, bu yüzden değişti gibi çalışır:

"products/{SeName}", // URL with parameters 

için:

başarısız
"products/{SeName}.html", // URL with parameters 

(404 sayfa IIS - MapRequestHandler) iis çalışıyorum gibi görünüyor g, uygulamaya yapıştırmak yerine bu ada sahip fiziksel bir dosya yüklemek. Benzer

: ASP.NET MVC Routing to start at html page (yanıtlanmayan, çoğaltmak değil)

+1

Yol hata ayıklayıcıyı takın ve gerçekten neler olduğunu görün. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

cevap

3

Uygulama Havuzunu Klasikten Entegre'ye dönüştürme sorunu çözdü. Yardımlarınız için teşekkürler.

10

Bir IIS işleyicisi muhtemelen öncesinde MVC isteği kapma olasılığı doğrudur olduğunu tahmin konum.

IIS 7 varsayarsak: Sen ASP.NET kullanmak için IIS içinde .html işleyicisi düzenlemeniz gerekebilir http://technet.microsoft.com/en-us/library/cc770990(v=ws.10).aspx

.

II6'daki eşlemeler bölümünde uygulama dizini ana dizin sekmesinin altındaki web sitesi özelliklerinde bulabilirsiniz. hatları (sürüm farklı olabilir) boyunca

şey: C: \ windows \ microsoft.net çerçeve \ v4.0.30319 \ aspnet_isapi.dll .html dosyaları işlemek için gerekenler \.

+2

'' bunu web.config dosyasına ekledi sorun hala var. – Dementic

+0

IIS erişimi olmadan bunu yapma olasılığından emin değilim. Anlayışım (yanlış olabilir), IIS'nin, eşleştirmeye dayalı olarak isteği nereye göndereceğini belirlemesi ve işleyicilerin normal koşullarda diğer işleyicileri geçersiz kılmadığıdır. IIS Express'te hata ayıklama yaparken bunu düzeltmesi gereken herkes için –

+5

, sistem tepsisinde IIS Express simgesini bulun, "Tüm uygulamaları göster", uygulamanızı seçin ve yapılandırma kaynağına bağlantıyı tıklayın, ardından "\ * için bir satır ekleyin .html "tüm" \ *. cshtml "satırlarını, alttaki/system.webServer/handlers düğümlerindeki yansıtma. –

3

Bu bölümü Web.config dosyasına ekleyin ve pathInfo'da noktalar olsa bile/{* pathInfo} yolundaki tüm istekler belirtilen işleyici tarafından işlenecektir. (ServiceStack MVC Sunucu Web.config örnek alınır ve bu cevap https://stackoverflow.com/a/12151501/801189)

<location path="route"> 
    <system.web> 
     <httpHandlers> 
     <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" /> 
     </httpHandlers> 
    </system.web> 
    <!-- Required for IIS 7.0 --> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
     <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
    </system.webServer> 
    </location> 
7

Sen ASP.NET boru hattı aracılığıyla tüm istek zorlamak zorunda ve web'e yalnızca bu tek satır ekleyerek yapabilirsiniz. Uygulamanızın yapılandırması:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

Bu, IIS Express'te çalışan ASP.Net MVC 4 uygulamasında çalıştı – Jimbo

İlgili konular