2012-11-23 35 views
6

我創建了一個基於Internet應用程序模板的新ASP.NET MVC 4應用程序,我可以成功運行它並從VS 2012 Express中驗證用戶身份。MVC 4網站加載顯示HTTP錯誤500.19

然後將它發佈到wwwroot中的文件夾中,然後在IIS 7.5管理器中創建一個指向該文件夾的虛擬目錄,並使用單獨的4.0集成池將其轉換爲應用程序。

當我試圖從IIS管理器中,我得到了一個錯誤內瀏覽應用程序:

HTTP錯誤500.19 - 內部服務器錯誤, 請求的頁面無法訪問,因爲該頁的相關配置數據無效。

配置錯誤:無法添加類型的重複的集合項 '添加' 具有獨特的關鍵屬性 '名' 設置爲 'ExtensionlessUrlHandler集成-4.0'

配置來源:

56:  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 
57:  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
58:  </handlers> 

searched here,我找到相應的答案:

分辨率1

刪除畸形XML ELE從ApplicationHost.config文件或從Web.config文件。

我的web.config文件如下:

<?xml version="1.0"?> 
    <configuration> 
     <configSections> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> 
     </configSections> 
     <connectionStrings> 
     <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-digixMVC4-20120915233326;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-digixMVC4-20120915233326.mdf" providerName="System.Data.SqlClient"/> 
     </connectionStrings> 
     <appSettings> 
     <add key="webpages:Version" value="2.0.0.0"/> 
     <add key="webpages:Enabled" value="false"/> 
     <add key="PreserveLoginUrl" value="true"/> 
     <add key="ClientValidationEnabled" value="true"/> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
     </appSettings> 

     <!-- 
     The following attributes can be set on the <httpRuntime> tag. 
      <system.Web> 
      <httpRuntime targetFramework="4.5"/> 
      </system.Web> 
     --> 
     <system.web> 
     <compilation targetFramework="4.5"/> 
     <httpRuntime/> 
     <authentication mode="Forms"> 
      <forms loginUrl="~/Account/Login" timeout="2880"/> 
     </authentication> 
     <pages controlRenderingCompatibilityVersion="4.0"> 
      <namespaces> 
      <add namespace="System.Web.Helpers"/> 
      <add namespace="System.Web.Mvc"/> 
      <add namespace="System.Web.Mvc.Ajax"/> 
      <add namespace="System.Web.Mvc.Html"/> 
      <add namespace="System.Web.Optimization"/> 
      <add namespace="System.Web.Routing"/> 
      <add namespace="System.Web.WebPages"/> 
      </namespaces> 
     </pages> 
     </system.web> 
     <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/> 
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/> 
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/> 
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/> 
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />  
     </handlers> 
     </system.webServer> 
     <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364g85"/> 
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/> 
      </dependentAssembly> 
      <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364g85"/> 
      <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0"/> 
      </dependentAssembly> 
      <dependentAssembly> 
      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364g85"/> 
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/> 
      </dependentAssembly> 
     </assemblyBinding> 
     </runtime> 
     <entityFramework> 
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/> 
     </entityFramework> 
    </configuration> 

正如我在MVC 4熟練的不良開發者,我會問,如果有人可以找出上述文件中的格式不正確的XML元素。

回答

5

你有兩次相同的名字。該名稱必須是唯一的。

當前配置

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 

變化

<add name="ExtensionlessUrlHandler-Integrated-4.0a" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 

<add name="ExtensionlessUrlHandler-Integrated-4.0b" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
+1

我沒有看到兩次相同的名稱,有不同的postfix _32bit或_64bit。這個後綴是不是很神奇? – qub1n

+0

這個問題也發生在我身上。我也有_32bit/_64bit後綴,但是,只要修改了兩個字符串,以任何方式修改字符串都可以解決問題。兩者可以具有相同的確切身體,但保留原始的_32位/ _64位後綴,它仍然可以工作,這告訴我它不是一個神奇的前綴。我懷疑它正在檢查解決方案中的其他項目/服務器上的匹配項。這個,或者IIS中發生的奇怪事情。 – 16807

+0

看完這個後想出來:http://stackoverflow.com/questions/26271958/what-does-extensionlessurlhandler-do-in-an-mvc-application。添加/刪除標籤的順序顯然很重要。在刪除IIS提供的現有默認設置之前,我添加了ExtensionlessUrlHandlers。默認值與我添加的處理程序名稱相同,因此錯誤。 – 16807

6

這是ASP.NET的WebAPI 5.2太真..

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

其中我改變到

<add name="ExtensionlessUrlHandler-Integrated-4.0a" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0b" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

這就是它..它的工作。

+0

是不是同一個處理程序?爲什麼需要使用不同的名稱添加兩次? –

0

我遇到過類似的問題。

什麼工作對我來說是刪除,然後重新添加的處理程序:

我的猜測是,如果在默認情況下這是在IIS服務器啓用了已經,也可能觸發此錯誤。

我正在使用IIS 10,MVC 5,.NET Framework 4.6。1

希望這有助於:-)