ASP.NET MVC trên IIS 7.5


338

Tôi đang chạy Windows 7 Ultimate (64 bit) bằng Visual Studio 2010 RC. Gần đây tôi đã quyết định chạy VS / gỡ lỗi ứng dụng của mình trên IIS chứ không phải máy chủ dev đi kèm.

Tuy nhiên, mỗi lần tôi thử chạy một ứng dụng MVC, tôi lại gặp phải lỗi sau:

Lỗi HTTP 403,14 - Bị cấm Máy chủ web được cấu hình để không liệt kê nội dung của thư mục này. Chi tiết

Thông tin lỗi

Module DirectoryListingModule

Thông báo ExecuteRequestHandler

Xử lý lỗi staticFile

Mã 0x00000000 được yêu cầu

URL http: // localhost: 80 / mySite /

Đường dẫn vật lý C: \ myProject \ mySite \

Phương thức đăng nhập Đăng nhập ẩn danh

Người dùng ẩn danh

Tôi đã đặt một default.aspxtập tin trong thư mục và tôi đã nhận được lỗi sau:

Lỗi HTTP 500,21 - Trình xử lý lỗi máy chủ nội bộ "PageHandlerFactory-Integration" có một mô-đun xấu "ManagedPipelineHandler" trong danh sách mô-đun của nó

Có bất kỳ bước nào khác tôi quên thực hiện để làm việc này?

Lưu ý: Tôi đã cài đặt IIS 7.5 sau khi cài đặt VS 2010 RC. Tôi đã sử dụng nút "Tạo thư mục ảo" tích hợp trong tab "Web" trong "Thuộc tính" của dự án MVC trong Visual Studio 2010. Tôi chắc chắn rằng ứng dụng đang sử dụng Nhóm ứng dụng ASP.NET 4.

Dưới đây là các tính năng cài đặt của IIS tôi có.

văn bản thay thế


Được rồi, tôi có một vấn đề tương tự và nó chỉ xuất hiện với các trang web ASP.NET MVC 3. Các trang web ASP.NET MVC 2 hoạt động tốt. Tôi đã đặt một tệp Default.aspx trong thư mục gốc của trang web và nó đã được chọn, không có vấn đề gì. Tôi đã triển khai trang web ASP.NET MVC 3 bằng VS2010 SP1 và vẫn không có gì vui. Tôi đang ở cuối trí thông minh của tôi với điều này.
Umar Farooq Khawaja

5
Tôi gặp vấn đề tương tự. Tôi đã thiết lập ứng dụng để sử dụng 4.0 tích hợp, chạy lệnh đăng ký để đăng ký .NET với IIS (7.5) và vẫn gặp lỗi này.
Collin trắng

2
Cuối cùng tôi đã có thể tìm ra vấn đề trong thiết lập của mình, đó là tôi đã đổi tên tệp _Layout.cshtmlthành _PageLayout.cshtmlvà đã thực hiện thay đổi tương ứng _ViewStart.cshtml, nhưng dường như điều đó là không đủ. Khi tôi hoàn nguyên tên _Layout.cshtml, nó bắt đầu hoạt động. Điều gây nhầm lẫn là đã _PageLayout.cshtmlđược chọn chính xác trên Win7 32 bit nhưng không được chọn trên Win7 64 bit hoặc WinSvr2K8 R2.
Umar Farooq Khawaja

3
Có ai tìm thấy giải pháp cho vấn đề này trên Windows 8 với IIS 8 không?
Eric Z Beard

3
Nếu bạn đang ở trên Windows Server 2012 hoặc cửa sổ 8 thấy điều này: [ stackoverflow.com/questions/12134713/... [1]: stackoverflow.com/questions/12134713/...
Lomak

Câu trả lời:


499

ASP.NET 4 không được đăng ký trong IIS. Phải chạy lệnh sau trong dòng lệnh / chạy

Windows 32 bit (x86)

% Windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

Windows 64 bit (x64)

% Windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

Lưu ý từ nhận xét của David Murdoch:

Phiên bản .net đã thay đổi kể từ khi Câu trả lời này được đăng. Kiểm tra phiên bản nào của khung trong thư mục% Windir% \ Microsoft.NET \ Framework64 và thay đổi lệnh cho phù hợp trước khi chạy (hiện tại là v4.0.30319)


9
Lưu ý "64" trong Framework64 cho Windows 64 bit! đó cắn tôi trong * ss. Tôi phải cài đặt verion 32 bit 4 hoặc 5 lần mà không có hiệu lực.
Ben Lesh

14
Phiên bản .net đã thay đổi kể từ khi Câu trả lời này được đăng. Kiểm tra phiên bản nào của khung trong %windir%\Microsoft.NET\Framework64thư mục và thay đổi lệnh cho phù hợp trước khi chạy (hiện tại là v4.0.30319).
David Murdoch

1
để thêm vào @bledh, nếu bạn có 64 bit và chạy aspnet_regiis.exe 32 bit, nó có thể chỉ hiển thị lại cho bạn các tùy chọn và không làm gì cả
xster

3
Nếu lệnh aspnet_regiis.exe bị thiếu trong thư mục khung .net, hãy tải xuống trình cài đặt khung .net đầy đủ microsoft.com/doad/en/iêu
warrickh

11
Điều này không hoạt động trong IIS8 btw, nếu bạn thử bạn sẽ nhận được "Tùy chọn này không được hỗ trợ trên phiên bản hệ điều hành này. Thay vào đó, quản trị viên nên cài đặt / gỡ cài đặt ASP.NET 4.5 bằng IIS8 bằng cách sử dụng" Bật / Tắt tính năng của Windows " hộp thoại, công cụ quản lý Trình quản lý máy chủ hoặc công cụ dòng lệnh merg.exe. Để biết thêm chi tiết, vui lòng xem go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro

199

Một điều nữa để đảm bảo bạn có là bộ sau đây trong web.config:

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

23
Điều đó đã làm nó cho tôi. Cảm ơn
boca

5
Cũng giải quyết nó cho tôi. Lạ là nó hoạt động cục bộ trong VS2010 IIS Express mà không cần cài đặt đó.
Phil

8
Nếu bạn không muốn đặt runAllManagedModulesForAllRequests(chạy ngay cả đối với các tệp tĩnh), bạn có thể cài đặt Microsoft hotfix: microsoft.com/doad/en/ ,.
Justin Helgerson

10
Cố gắng tránh điều này bằng cách thêm mô-đun định tuyến: britishdeveloper.co.uk/2010/06/ Kẻ
Chris Herring

Nếu bạn đang sử dụng VS2013 và đang cố chạy trên IIS 7.5 - bạn cần thêm cái này
KenL

77

Hãy chắc chắn rằng bạn có bộ sau đây trong web.config:

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

Giải pháp tốt hơn:

Mặc dù giải pháp trên hoạt động hoàn toàn tốt , nó có thể gây ra sự cố khác vì nó chạy tất cả các mô-đun HTTP đã đăng ký của bạn cho mọi yêu cầu (ngay cả trên mọi yêu cầu của .jpg .gif .css .html .pdf, v.v.) và rõ ràng là lãng phí tài nguyên. Thay thế

<system.webServer>
<modules>
  <remove name="UrlRoutingModule-4.0"/>
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>

Đảm bảo thuộc tính preCondition trống có nghĩa là nó sẽ chạy trên tất cả các yêu cầu. [Đọc thêm] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Đọc bài gốc")


6
Điều này đã sửa lỗi 403,14 trên thư mục gốc và 404 trên các phương thức điều khiển khác cho ứng dụng MVC của tôi. Tuy nhiên, vẫn còn một cái gì đó đáng nghi ở đây, vì tôi có một ứng dụng khác đang chạy trên cùng một máy chủ có cùng cài đặt trang hiển thị và nó hoạt động mà không cần cài đặt này. Đây là một web.config được tạo bởi mẫu dự án SPA do VS 2012 cung cấp, hoạt động tốt trên hộp của tôi nhưng không hoạt động khi được xuất bản.
shannon

4
Có, vì vậy thiết bị phát triển của tôi chứa <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, trong Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configvà dường như đã được sửa đổi vào ngày cài đặt VS 2012 của tôi. Vì vậy, câu hỏi tiếp theo là, dự án khác của tôi cho phép nó hoạt động là gì?
shannon

Lưu ý rằng rõ ràng đây không phải là %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irgiải pháp được đề xuất bởi giải pháp hàng đầu đặt bất kỳ giá trị mặc định nào phải tồn tại trên thiết bị phát triển của tôi. Lệnh đó không giải quyết vấn đề cho tôi khi tôi xóa tham chiếu UrlRoutingModule.
shannon

Điều đó hoạt động trên Windows Server 2008 R2 IIS 7 cho ASP.NET MVC 5. Cảm ơn bạn!
Ervi B

42

Một lý do khác khiến ai đó có thể gặp lỗi này là nếu tệp Global.asax không còn trong thư mục gốc nữa.


4
Đúng - trình cài đặt tôi đã viết không mang tập tin này qua. Cảm ơn!
zadam

4
Đây cũng là vấn đề của tôi. Tôi chưa bao giờ đoán được dựa trên triệu chứng 403 rằng ứng dụng của tôi bị thiếu Global.asax
Saul Dolgin

3
Cũng sửa nó cho tôi: tắt biên dịch trước trong các tùy chọn xuất bản ( global.asaxchỉ tệp bị ảnh hưởng).
Richard

1
Điều này đã lừa tôi. Điều này là đối với tôi và tôi nghe cho nhiều người khác, global.asax được tạo ra mỗi khi tôi xuất bản. Có ai tìm ra cách để tạo ra nó mỗi lần không?
Greg Z.

Cảm ơn, đã khắc phục vấn đề của tôi. Ứng dụng chạy trên ASP.NET MVC 4.0, Framework 4.0. Lưu trữ trên Arvixe.
Joe King

20

Tôi cũng đã nhận được lỗi này và phát hiện ra rằng "Chuyển hướng HTTP" không được bật trong Windows Server. Bài viết trên blog này chỉ này ra cũng như: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx


6
Trong tất cả những thứ chết tiệt nó có thể có, đây là nó. Tôi đã tìm kiếm ở khắp mọi nơi và chơi với các cài đặt bảo mật trong vài giờ, aspnet_regiis, và bật và tắt. Jesus bé ngọt ngào trên một cuộn kaiser vụn.
Andrew Backer

Tôi đã dành cả một ngày cho việc này. Cảm ơn bạn rất nhiều.
Pradeep

Đối với Windows 8, tôi vẫn gặp lỗi sau khi bật Chuyển hướng HTTP. Phải thực hiện bước này như một bước thứ hai: Thêm vai trò ASP.NET 4.5 trong Dịch vụ thông tin Internet -> Dịch vụ web toàn cầu -> Tính năng phát triển ứng dụng serverfault.com/questions/514091/
Lỗi

Điểm dừng thứ hai đã giải quyết vấn đề của tôi. Một số máy hoạt động mà không có nó, nhưng những máy khác thì điều này rất cần thiết. Cảm ơn.
Alexis Heijmeijer

15

Chúa Giêsu ngọt ngào. Tôi đã thử tất cả những điều trên (nhưng thấy cài đặt của tôi giống hệt nhau). YET ANOTHER GIẢI PHÁP nếu bạn gặp vấn đề:

http://support.microsoft.com/kb/980368

Hãy thử cài đặt KB này cho hệ thống của bạn. Nếu bạn đang thấy 404 thì có thể là do bạn không có bản cập nhật này - và mô-đun isapi không được tìm thấy và bạn không thể làm gì nhiều về điều đó nếu không có điều này!


1
Đã giải quyết cho tôi trên máy chủ 32 bit chạy Server 2008 SP2 (không phải R2)
Simon C


7

Đối với tôi trên Azure Server 2012 R2 IIS 8.5 VM với ứng dụng Asp.Net MVC 5 (bin triển khai MVC 5) Tôi đã phải thực hiện các thao tác sau từ dấu nhắc cmd nâng cao mặc dù tôi đã cài đặt 4.5:

dism /online /enable-feature /featurename:IIS-ASPNET45

Nguồn: http://support.microsoft.com/kb/2736284

Tôi cũng đã cài đặt tất cả các tính năng của IIS bằng PowerShell sau:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

Nguồn: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Bây giờ ứng dụng của tôi đang làm việc.


Công cụ "tháo dỡ" hoạt động với tôi (không áp dụng bất kỳ thay đổi được đề xuất nào khác). Tôi chỉ phải chuyển công tắc '/ all' sang cuối để đảm bảo rằng tất cả các tính năng 'cha mẹ' cũng được cài đặt.
Jeroen Ritmeijer

Điều này làm việc cho tôi. Chạy MVC 5 với .NET 4.5 trên Windows Server 2012. IIS theo mặc định sẽ không cài đặt .NET 4.5.
DPac

6

Chúng tôi đã có một ứng dụng MVC được chuyển đến một máy chủ mới. .NET 4 và MVC 3 đã được cài đặt, nhưng chúng tôi vẫn gặp lỗi Lỗi 403,14. Trong trường hợp này, điều này có nghĩa là IIS không hiểu rằng nó đang xử lý một ứng dụng MVC, nó đang tìm trang mặc định.

Giải pháp rất đơn giản: Chuyển hướng HTTP không được cài đặt trên máy chủ.

Trình quản lý máy chủ - Vai trò - Máy chủ web (IIS) - Dịch vụ vai trò - Chuyển hướng HTTP: Chưa được cài đặt. Cài đặt nó, vấn đề được giải quyết.


1
Quản lý máy chủ là gì? tôi tìm nó ở đâu
Elad Katz

Trình quản lý máy chủ được đặt trong Công cụ quản trị
udog

5

Ngoài ra nếu ứng dụng của bạn được biên dịch trước, bạn nên có

PrecompiledApp.config

trong thư mục gốc của ứng dụng của bạn nếu không bạn cũng có thể nhận được HTTP Error 403.14.


Tôi đã có tệp ở đó vì một số lý do mặc dù ứng dụng của tôi không được biên dịch trước. Đã xóa các tập tin và nó hoạt động ngay bây giờ. Cảm ơn bạn!
vaindil 8/2/2016

Tôi sẽ thực sự hạnh phúc nếu tôi thấy câu trả lời này trước khi dành 2 giờ và tự mình giải quyết nó ..
sotn

4

Một giải pháp khả thi khác, nếu bạn di chuyển xung quanh global.asax của mình, hãy đảm bảo đánh dấu trỏ đến lớp MvcApplication chính xác. Hy vọng điều này sẽ cứu ai đó trong tương lai.


4

Tôi đã sử dụng Tiện ích mở rộng IIS WebDeploy để nhập các trang web của mình từ IIS6 sang IIS7.5, vì vậy tất cả các cài đặt IIS chính xác như trong môi trường sản xuất. Sau khi thử tất cả các giải pháp được cung cấp ở đây, không có giải pháp nào phù hợp với tôi, tôi chỉ cần thay đổi cài đặt Nhóm ứng dụng cho trang web từ Cổ điển sang Tích hợp.


4

Tôi đã gặp vấn đề tương tự 404,14 bất ngờ. Cuối cùng, sự cố đã được khắc phục bằng cách bỏ chọn "tiền biên dịch trong khi xuất bản" trong cài đặt cấu hình xuất bản.


Tương tự ở đây. Xuất bản là không có vấn đề cho đến ngày hôm nay - bỏ chọn đã giải quyết nó. Dù sao cũng lạ
Ngài Rufo

4

Tôi đã thay đổi tuyến đường mặc định của mình tại một điểm từ:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

Đến:

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

Mà đã cho tôi lỗi của bạn. Vui mừng khi ai đó đề cập đến định tuyến bởi vì tôi có thể đã ở trên này mãi mãi.


4

Trong trường hợp của tôi, ASP.NET 4.5 không được cài đặt trên máy chủ nên cài đặt ASP.NET 4.5 đã khắc phục sự cố.


4

Bạn có thể giải quyết lỗi này bằng cách chạy cmd với tư cách quản trị viên nhập mô tả hình ảnh ở đây

Làm tương tự như trong hình cho windows 32 bit

Chỉ cần thực hiện các thay đổi trong 64 bit dưới dạng framework64 thay vì framework chỉ đi đến iis và làm mới trang web
Nếu bạn vẫn gặp một số lỗi, hãy thay đổi trong nhóm ứng dụng


3

Tôi đã có một vấn đề khác dẫn đến vấn đề này.

  • Tôi đã đảm bảo nhóm ứng dụng của mình đang chạy .net 4 ở chế độ tích hợp
  • Tôi đã chạy aspnet_regiis.exe -i
  • Tôi đã kiểm tra quyền truy cập thư mục được đặt chính xác cho tài khoản chạy nhóm ứng dụng của tôi

Không ai trong số những điều này làm việc. Hóa ra trong web.config của tôi trong các mô-đun system.webserver> tôi có các phần sau:

<remove name="WindowsAuthentication" />

Rõ ràng điều này đã loại bỏ mô-đun xác thực windows mà dường như bằng cách nào đó đánh bật mọi thứ.

Tôi hy vọng điều này sẽ giúp được ai đó, vì điều này làm tôi mất hầu hết một buổi tối!


3

Giao diện người dùng hơi khác một chút trong các phiên bản Windows Server mới hơn. Đây là nơi bạn phải kích hoạt ASP.Net để nó hoạt động trên IIS

Sửa IIS & Asp.net


2

Thêm một giải pháp khác cho vấn đề này.

trong tệp Global.asax.cs của tôi, tôi đã vô hiệu hóa các tệp php đã bị tiêu thụ bởi đường ống MVC bằng cách sử dụng như sau:

routes.IgnoreRoute( "{*php}" );

Tôi đã thực hiện những điều này trước đây trong một dự án MVC2 và nó hoạt động tốt, nhưng thực hiện điều này trong ứng dụng MVC 3 của tôi đã gây ra sự cố được báo cáo ở trên.


2

Một lý do khác điều này có thể xảy ra - của bạn RouteConfig.cshoặc WebApiConfig.cskhông hợp lệ.

Trong trường hợp của tôi, tôi đã có một tuyến đường được xác định như vậy (lưu ý dấu ngoặc đơn thay vì dấu ngoặc nhọn):

...
routeTemplate: "api/(something}"
...

Nó làm việc cho tôi! Trong trường hợp tôi thay đổi routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Khi tôi cố định id = UrlParameter.Optionaltrên repositoryId = UrlParameter.Optionalnó bắt đầu làm việc!
Dmitresky

2

Xin lưu ý đối với người dùng Windows 8, bạn cần thêm / xóa các thành phần windows và xóa phiên bản khởi động lại .net sau đó cài đặt lại để đăng ký với IIS. Tôi đoán điều này xảy ra nếu bạn nhận được .net 4.5 từ visual studio và cài đặt IIS sau đó.


2

Có vẻ lạ, có vẻ như việc cài đặt lại IIS là điều đã làm việc với tôi, với lệnh sau được chạy từ bên trong thư mục phiên bản .net:

aspnet_regiis.exe /i

nhập mô tả hình ảnh ở đây

Khi tôi lần đầu tiên chạy lệnh này, tôi bắt đầu nhận được Lỗi HTTP 403,14. Nhưng một khi tôi chạy lại lệnh thì nó đã giải quyết được vấn đề.

Quan sát : Một điều khác tôi cũng đã làm là xóa HTTP Redirect khỏi các tính năng của máy chủ trong màn hình Quản lý máy chủ trước khi cài đặt lại IIS. Có lẽ điều này cũng có tác động trong việc giải quyết vấn đề, nhưng tôi không chắc chắn. Vì vậy, nếu cài đặt lại IIS vẫn không hoạt động, vui lòng thử xóa HTTP Redirect và thử lại. Hy vọng nó có thể làm việc cho bạn quá.


FYI aspnet_regiis.exekhông cài đặt hoặc cài đặt lại IIS, nó chỉ đăng ký một phiên bản .NET framework cụ thể, để IIS có thể được sử dụng để lưu trữ các ứng dụng.
stephen

1

Để giải quyết vấn đề này mà không phải dùng đến chế độ 32 bit, bạn sẽ phải cập nhật mã nguồn cho dự án này

public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
    // Enumerate assembly for UrlRoute attributes.
    List<MapRouteParams> routeParams = new List<MapRouteParams>();
    AppDomain.CurrentDomain.GetAssemblies()
        .ToList()
        .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));

Tôi đã nêu vấn đề này như một cuộc thảo luận trên diễn đàn thảo luận tại dự án mã hóa đám mây CNTT.

http://itcloud.codeplex.com/discussions/262000


1

Điều này làm việc cho tôi và nó có thể hữu ích cho người khác.

Có thể tất cả các thành phần cần thiết không có mặt hoặc / và không phải tất cả đều được đăng ký chính xác. Để giải quyết vấn đề này, hãy thử bỏ chọn tất cả các tùy chọn bên trong Bảng điều khiển -> Bật hoặc tắt các tính năng của Windows -> Dịch vụ thông tin Internet -> Dịch vụ web toàn cầu -> Tính năng phát triển ứng dụng, bỏ chọn tất cả các tùy chọn và kiểm tra lại tất cả sau đó đặt lại IIS và kiểm tra nếu vấn đề được giải quyết.

nhập mô tả hình ảnh ở đây


1

Nếu bạn đang chạy IIS 8.5 trên Windows 8 hoặc Server 2012, bạn có thể thấy rằng việc chạy mvc 4/5 (.net 4.5) không hoạt động trong một thư mục ảo. Nếu bạn tạo một mục nhập máy chủ cục bộ trong tệp máy chủ để trỏ về máy cục bộ của bạn và sau đó trỏ một trang web IIS cục bộ mới vào thư mục đó (với mục nhập tiêu đề máy chủ phù hợp) thì bạn sẽ thấy nó hoạt động.


0

Tôi đã tạo một không gian tên mới (và do đó là thư mục) giống hệt với tuyến đến bộ điều khiển (ví dụ MvcApp/Test/SomeClasses.csMvcApp/Controllers/TestController.cs). Điều này cũng dẫn đến một 403,14!


0

Đối với tôi, giải pháp là thêm gói NuGet Microsoft.AspNet.WebPages (cộng với phụ thuộc vào Dao cạo và Cơ sở hạ tầng) vào dự án web của tôi.

Cơ sở hạ tầng phải được cài đặt lại một cách mạnh mẽ vì ban đầu nó không được thêm vào như một tài liệu tham khảo.


0

Trong trường hợp của tôi, phiên bản .NET CRL trong ứng dụng prppertires được đặt thành Không có mã được quản lý (không biết tại sao). Đặt nó thành .NET CRL Phiên bản v4.0.30319 đã giải quyết được vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.