2008-11-09 8 views
8

Tôi đã cố gắng thiết lập ứng dụng Beta 1 MVC trên IIS 6 và không thể chạy nó đúng cách. Tôi đã thêm một ánh xạ ký tự đại diện cho DLL .net ISAPI như đề xuất trong bài đăng trên blog khác, nhưng nhận được lỗi sau khi tôi truy cập vào thư mục gốc của website:ASP.NET MVC trên IIS 6 - ánh xạ ký tự đại diện - yêu cầu đến không khớp với bất kỳ tuyến đường nào

The incoming request does not match any route. 
.. 
[HttpException (0x80004005): The incoming request does not match any route.] 
    System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +147 
    System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +36 
    System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +4 
    HCD.Intranet.Web.Default.Page_Load(Object sender, EventArgs e) +81 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +47 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436 

Tôi đang sử dụng trang Default.aspx cung cấp trong Ứng dụng mẫu MVC ghi lại quyền truy cập vào thư mục gốc của trang web đúng cách.

public partial class Default : Page 
{ 
    public void Page_Load(object sender, System.EventArgs e) 
    { 
     HttpContext.Current.RewritePath(Request.ApplicationPath); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

Nếu tôi cố gắng và truy cập vào một con đường bên trong ứng dụng, chẳng hạn như/dự án, tôi nhận tiêu chuẩn IIS 404 trang lỗi, không phải là trang báo lỗi .net.

Tôi đã thử thêm dòng sau vào phần httpHandlers Web.config của tôi:

<add verb="*" path="*" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

này đã cho tôi một lỗi khác nhau - các trang lỗi .net 404.

tôi đã thêm dòng sau vào Global.asax của tôi, mà đã không làm gì:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (Context.Request.FilePath.Equals("/")) 
     Context.RewritePath("Default.aspx"); 
} 

Tôi đang sử dụng cấu hình tuyến đường sau (sử dụng định tuyến yên tĩnh được cung cấp bởi các dự án MvcContrib):

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
SimplyRestfulRouteHandler.BuildRoutes(routes); 
routes.MapRoute(
"Default", 
"{controller}/{action}/{id}", 
new { controller = "Home", action = "Index", id = "" } 
); 

Bất kỳ đề xuất nào sẽ được nhận một cách grealy vì tôi đã hết tất cả các lựa chọn cho thời gian tôi có ngay bây giờ.

Rất cám ơn.

Trả lời

8

OK, đã nhận nó làm việc.

vấn đề là rằng tôi đã sử dụng tự động hóa msbuild để đóng gói các tệp mà tôi cần triển khai và tôi đã thiếu global.asax.

Vì vậy, có vẻ như nếu global.asax không được triển khai cho trang web thì không có tuyến đường nào được kết nối. Điều này có nghĩa là nhấn vào gốc của trang web sẽ dẫn đến lỗi chính xác 'Yêu cầu đến không khớp với bất kỳ tuyến đường nào.' Và bất kỳ yêu cầu nào khác không còn được chuyển đến các lớp điều khiển của bạn nữa, do đó dẫn đến 404.

HTH.

+0

Hoàn hảo - đây là vấn đề của tôi. Tôi đã xây dựng qua NAnt/MSBuild và không bao gồm tệp Global.asax. Có tập tin đó giải quyết mọi thứ. –

+0

Hmm, tôi có cùng một vấn đề, và tôi cũng đang sử dụng các kịch bản xây dựng để đóng gói các tệp, nhưng tệp Global.asax của tôi chắc chắn có trong thư mục web root. –

1

Đáng tiếc là IIS 6 cần một phần mở rộng tập tin để lập bản đồ theo yêu cầu để xử lý đúng có nghĩa là bạn sẽ phải sử dụng hậu tố .mvc về tên điều khiển của bạn, chẳng hạn như /{controller}.mvc/{action}

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

SimplyRestfulRouteHandler.BuildRoutes(routes); 

routes.MapRoute(
     "Default", 
     "{controller}.mvc/{action}/{id}", 
     new { controller = "Home", action = "Index", id = "" } 
); 

Tuy nhiên, đây là những cách xung quanh tùy thuộc vào mức độ kiểm soát của bạn trên máy chủ IIS 6. Vui lòng tham khảo các trang sau để biết thêm thông tin

18

Đây là những gì tôi đã làm để có được URL extensionless làm việc với IIS 6 và ASP.NET MVC Beta 1.

  • Tạo dự án ASP.NET MVC Beta mặc định và biên dịch nó.
  • Tạo trang web IIS mới trỏ đến thư mục ứng dụng.
  • Trong thuộc tính IIS cho trang web , hãy nhấp vào tab HomeDirectory .
  • Nhấp vào nút "Cấu hình ...". Trong tab "Ánh xạ", hãy nhấp vào "Chèn ..."
  • Bên cạnh nhãn "Wildcard application maps" Trong hộp văn bản, nhập "c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll"
  • Bỏ chọn hộp có nhãn "Xác nhận rằng tập tin tồn tại" Click OK
  • Navigate to/home Nó làm việc!

Bạn không nên cần phải thay đổi web.config ở tất cả. Bạn chỉ cần bản đồ tất cả các yêu cầu tới IIS để dll ASP.NET ISAPI khác ASP.NET sẽ không bao giờ có được những yêu cầu đó.

+0

cảm ơn bạn SO nhiều !! – Sekhar

+0

Cảm ơn bạn đã đăng bài này, đặc biệt là 'Bỏ chọn hộp có gắn nhãn "Xác minh rằng tệp tồn tại" Nhấp vào OK' bước mà tôi đã quên. – Inigoesdr