1. 程式人生 > >使用VS2017開發ASP.NET MVC釋出到虛擬主機中無法訪問的問題記錄

使用VS2017開發ASP.NET MVC釋出到虛擬主機中無法訪問的問題記錄

1. 虛擬主機最高支援到.Net FrameWork 4.7,使用VS2017新建一個ASP.NET FrameWork 4.7應用釋出到FTP之後發現報錯。

查了發現問題在於VS2017編譯器預設為Roslyn,虛擬主機中不支援用Roslyn編譯進行動態編譯。

解決方案:

不使用Roslyn,在Nugut中將Microsoft.CodeDom.Providers.DotNetCompilerPlatform包解除安裝。手動刪除Roslyn目錄。

2. 虛擬主機最高支援MVC 4,但是上傳之後發現路由無法對映,報404。

整理一下:

MVC4:

根目錄下的Web.Config:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  https://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <!--
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.

    The following attributes can be set on the <httpRuntime> tag.
      <system.Web>
        <httpRuntime targetFramework="4.5" />
      </system.Web>
  -->
  <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime/>
    <customErrors mode="Off"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="4.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <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" />
    </handlers>
  </system.webServer>
</configuration>

Views目錄下的Web.Config:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <!--<add key="webpages:Enabled" value="false" />-->
    <add key="webpages:Version" value="2.0.0.0" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>

    <!-- 
        Enabling request validation in view pages would cause validation to occur 
        after the input has already been processed by the controller. By default 
        MVC performs request validation before a controller processes the input. 
        To change this behavior apply the ValidateInputAttribute to a 
        controller or action. 
    -->
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

因為虛擬主機支援.Net 4.7,因此我就試了一下MVC 5,果然是可以的。附上Web.Config。

MVC 5:

根目錄下的Web.Config:

<?xml version="1.0" encoding="utf-8"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  https://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.7.2"/>
    <httpRuntime targetFramework="4.7.2"/>
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.6.0" newVersion="5.2.6.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <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"/>
    </handlers>
  </system.webServer>
</configuration>

Views目錄下的Web.Config:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <!--<add key="webpages:Enabled" value="false" />-->
    <add key="webpages:Version" value="2.0.0.0" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>

    <!-- 
        Enabling request validation in view pages would cause validation to occur 
        after the input has already been processed by the controller. By default 
        MVC performs request validation before a controller processes the input. 
        To change this behavior apply the ValidateInputAttribute to a 
        controller or action. 
    -->
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

相關推薦

使用VS2017開發ASP.NET MVC釋出虛擬主機無法訪問的問題記錄

1. 虛擬主機最高支援到.Net FrameWork 4.7,使用VS2017新建一個ASP.NET FrameWork 4.7應用釋出到FTP之後發現報錯。 查了發現問題在於VS2017編譯器預設為Roslyn,虛擬主機中不支援用Roslyn編譯進行動態編譯。 解決

不使用Visual Studio開發ASP.NET MVC應用(下篇)

構建 onf log rdquo 你們 err ica ide lan 書接上回! 前文“純手工”、徹底拋棄Visual Studio,制作了一個ASP.NET MVC應用,運行起來還不錯,項目目錄、源代碼、web.config等所有東西都已經做到

UI控制元件Telerik UI for ASP.NET MVC釋出R3 2018 SP1|附下載

UI for ASP.NET MVC擁有使用JavaScript和HTML5構建網站和移動應用所需的70+UI部件,來滿足開發者的各種需求,提供無語倫比的開發效能和使用者體驗。它主要是針對專業級的 ASP.NET開發,通過該產品的強大功能,開發者可以開發出功能豐富、適應標準廣泛的響應式應用程式。

使用Visual Studio 2015 開發ASP.NET MVC 5 專案部署到Mono/Jexus

最新的Mono 4.4已經支援執行asp.net mvc5專案,有的同學聽了這句話就興高采烈的拿起Visual Studio 2015建立了一個mvc 5的專案,然後部署到Mono上,瀏覽下發現一堆錯誤出現,心中一萬隻草泥馬奔騰而來,這也叫支援嗎,這個問題是Visual Studio造成的,不相信的話可以使用

Asp.net mvc 釋出winserver 2012

首先在開啟伺服器管理,點新增角色和功能  這個名字自己設定不打緊 勾選web伺服器,之後點下一步 在功能選擇中勾選下面部分 之後點選工具選擇服務,確保web服務正在執行 此時服務端告一段落,返回主機開啟vs清理和重新生成解決方案,然後在web專案右鍵點擊發布。名

ASP.NET MVC釋出部署過程

IIS 7.0 直接建立WebSite就可以了   可能出現500.19錯誤,原因是先安裝了vs,後安裝iis 解決方案: cmd導航到C:\Windows\System32\inetsrv 執行appcmd unlock config -section:system.w

[ASP.NET 2.0]虛擬主機上部署AJAX控制元件

在未安裝微軟AJAX元件的虛擬主機上部署包含ajax控制元件的WEB程式的方法: 在本機找到 C:/Program Files/Microsoft ASP.NET/ASP.NET 2.0 AJAX Extensions/v1.0.61025 將目錄下的System.Web.E

Essential Studio for ASP.NET MVC釋出2017 v2,增加日期範圍選擇器功能

Essential Studio for ASP.NET MVC是一個幫您輕鬆建立高效能Web應用程式的ASP.NET MVC介面開發包,它包含了幾乎所有企業級Web應用程式開發所需要的控制元件,如Grids, Charts, Gauges, Menus, Calend

ASP.NET MVC如何在Action返回腳本並執行

發現 刷新 asc 特殊 spa 如果 resp 添加 div 我們都知道在aspx頁面的cs文件中只要用Respos.Write("<script></scritp>")就可以在前臺執行腳本 但是在MVC中就不一樣了,返回腳本要給定腳本類型返回。如

asp.net core 釋出到iis session無法傳遞的問題

網站是用asp.net core 的Razor Pages開發的,其中使用者登入用到了session,除錯執行沒有問題,但是釋出到iis之後出現session無法記錄的問題。 我用log記錄查看了一下,發現同一頁面記錄session再取是可以的,但是跳轉到另一個頁面就無法獲取session資訊了。 解決方

ASP.NET MVC的資料模型設定的DataAnnotation MaxLength的驗證無效的解決方式

本文例項講述ASP.NET在MVC中設定的DataAnnotation  MaxLength特性設定無效的解決方法。分享給大家供大家參考。具體分析如下:我們經常會在ASP.NET MVC專案中,給某個Model的欄位設定MaxLength特性如下:public class E

asp.net mvc razor佈局頁a標籤的href的跳轉問題

筆者做了一個檔案上傳系統,檔案上傳後,儲存在wwwroot目錄的file資料夾中,並把該檔案的路徑儲存到資料庫中, 如這樣的一個路徑儲存在資料庫: file/b775f487-0127-41e0-9df8-2a5f1624cd87.jpg上傳成功後,當在home控制器的in

Asp.Net MVC 4 Web API 的安全認證---使用OAuth

//文章轉載自 //  Oauth授權處理 http://www.cnblogs.com/n-pei/archive/2012/05/29/2524673.html#undefined 相關: http://www.cnblogs.com/n-pei/archive

ASP.Net MVC從客戶端檢測到有潛在危險的 Request.Form 值

ASP.NET MVC4(Razor)從客戶端中檢測到有潛在危險的 Request.Form 值  “/”應用程式中的伺服器錯誤。 從客戶端(Content=" sdfdddd ...")中檢測到有潛在危險的 Request.Form 值。 說明: ASP.NET 在請求中

asp.net mvc 設置一個action的訪問人數,達到上線排隊

scom completed sta listt 完成 異步 lis string let /// <summary> /// 1,對訪問此action的用戶進行異步處理,然後將此異步加入到全局的list當中, /// 再

WebMatrix開發的Razor網站釋出到IIS後無法訪問的解決方法

其實在vwd下面除錯是正常滴;IIS環境在網址後新增.cshtml字尾,也是可以成功訪問滴~!不過,估計大家都不願這麼弄,還好Google了一下,找到了一片英文的解決方案:http://learn.iis.net/page.aspx/872/webmatrix-beta-r

ASP.NET Core Web API 專案裡無法訪問(wwwroot)下的檔案

解決辦法:在“ Startup.cs ” 檔案裡的 Configur方法裡新增一句程式碼“ app.UseStaticFiles() ”,這樣就可以訪問wwwroot下的檔案了。 - 方法程式碼是

ASP.NET MVC企業實戰》(一) MVC開發前奏

htm 右鍵 () ctrl+ 其中 bsp net 代碼 int 一、工具和方法 學到了一些沒用過的工具和方法: a)刪除多余的using指令並排序:一個類頭部的using一般會有很多用不到的,在完成類的編寫後,可以右鍵選擇”組織using”來刪除沒用的using並排序

Asp.Net MVC 插件化開發簡化方案

asp.net 插件化 Web 管理系統可以龐大到不可想像的地方,如果想就在一個 Asp.Net MVC 項目中完成開發,這個工程將會變得非常龐大,協作起來也會比較困難。為了解決這個問題,Asp.Net MVC 引入了 Areas 的概念,將模塊劃分到 Area 中去——然而 Area 仍然是主項目的

asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發2-Model層建立

ack 前端 strong syn eee 名稱 lar led tegra 上篇(asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發1-準備工作)文章講解了開發過程中的準備工作,主要創建了項目數據庫及項目,本文主要講解項目M層的實現,M層