部署ASP.NET MVC应用到IIS

6总是会引起混乱在第一。你已经编码在Visual Studio

2008中,看到你可爱干净的URL中内置的Web服务器很好地工作,你坚持了一些代码的Windows Server

2003的计算机上,然后重击!这一切都像404找不到和你像嘿伙计,这不是很酷。

图像

这是因为IIS

6中仅调用ASP.NET时,看到的是被映射为aspnet_isapi.dll

URL中的“文件扩展名”(这是负责ASP.NET调用一个C / C + +的ISAPI筛选器) 。由于路由是。NET

IHttpModule的所谓UrlRoutingModule

,它不会被调用,除非ASP.NET本身被调用时,被调用的aspnet_isapi.dll只发生,而只发生时,有一个的。aspx在URL中。所以,没有的。aspx

,没有UrlRoutingModule ,因此404 。

我说你已经得到了解决此四种方式:

选项1:使用通配符映射的aspnet_isapi.dll

这告诉IIS

6中使用ASP.NET来处理所有的请求,所以路由总是调用,而且也没有问题。它的死很容易设置:打开IIS管理器中,右键单击您的应用程序,选择属性,然后主目录选项卡,然后单击配置。在通配符应用程序映射,然后单击插入(不添加,这是容易混淆的正上方)

,然后输入C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \

aspnet_isapi.dll的为“可执行文件” ,然后取消选中确认文件是否存在。

完成了!现在路由只是行为,因为它总是在VS2008内置的服务器一样。

不幸的是,这也告诉IIS使用ASP.NET提供的所有请求,包括对静态文件。它将工作,因为ASP.NET有一个内置的DefaultHttpHandler

,做它,但根据您的要求在做什么,它可能会使用StaticFileHandler服务请求。

StaticFileHandler比IIS本身效率低得多。你看,它总是从磁盘读取文件的每一个请求,不缓存在内存中。它不发送,你可能已经在IIS中配置的Cache-

Control头,那么浏览器将不缓存它正确。它没有做HTTP压缩。但是,如果你能避免与请求干扰,

DefaultHttpHandler将控制传递回IIS的本地处理,这是好多了。

对于小型的Intranet应用程序,通配符映射可能是最好的选择。是的,它的影响略有表现,但是这可能不是一个问题给你。也许你有更好的事情操心。

对于较大的公共互联网应用,你可能需要一个解决方案,提供更好的性能。

更新:原来,你可以禁用选定的子文件夹通配符映射,它可以给你最好的两个世界。

方案2 :将ASPX中所有的路由条目“ URL模式

如果你不介意在你的网址。 ASPX

,只是通过你的路由配置,添加的。aspx一个正斜杠在每个模式之前。例如,使用(控制器)的。aspx / {行动} / {

id}的或myapp.aspx / {控制器} / {行动} / {

id}的。不要把ASPX里面的大括号的参数名称,或进入“默认”值,因为它不是真正的控制器名称的一部分 -

它只是在URL中,以满足IIS。

现在,您的申请将被就像一个传统的ASP.NET应用程序调用。

IIS仍处理静态文件。这可能是在共享主机方案中最简单的解决方案。不幸的是,你已经宠坏了你,否则干净的URL模式。

选项​​3:使用在所有的URL模式的自定义文件扩展名

这是与上述相同,除了用类似的东西。

MVC代替甑。它并没有真正创造任何优势,不是炫耀你正在使用ASP.NET MVC等。

正如上文所述更新您的路由条目,除了投入的。aspx的。

MVC代替。接下来,注册一个新的ISAPI映射:打开IIS管理器中,右键单击您的应用程序,选择属性,然后主目录选项卡,然后单击配置。在映射选项卡,单击添加,然后输入C:

\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \

aspnet_isapi.dll的为“可执行文件” , MVC (或任何你使用的扩展名)为“扩展”

,和取消选中确认文件是否存在。离开脚本引擎检查(除非你的应用程序有执行权限),并保留选中所有动词,除非你特别要过滤的HTTP方法。

这就是它 -

你现在使用的是自定义的扩展。不幸的是,它仍然是一个有点否则你干净的URL模式碍眼的。

选项4 :使用URL重写

这是一个技巧,使IIS认为有URL中的文件扩展名,即使没有。它的实施是最难解决方案,但只有一个,让完全干净的URL不会对性能有任何显著流失。

本Scheirman想出了关于这个问题的一个伟大的职位,但我适应的技术稍微以免无需以任何方式更改我的路由配置。下面是它的工作对我来说:

1

。作为扩展名的请求到达时,我们有一个第三方ISAPI筛选器重写添加已知延长期限的请求:甑。

2 。 IIS中看到的延伸,并将其映射为aspnet_isapi.dll

,因此在ASP.NET

3

。之前看到路由的要求,我们有一个的Application_BeginRequest (

)处理程序重写的URL回其原始的,无扩展名的形式

4 。路由看到扩展名的URL和正常的行为。

由于该URL被取消改写在步骤3中,你不必做任何事情好笑进行对外的URL生成工作。

该怎么办呢

首先,下载并安装赫利的下ISAPI_Rewrite

。您可以使用免费版本,版本2

,但要注意这会影响你的服务器上的所有网站。如果你需要重写定位到一个特定的应用程序或虚拟目录,你需要付费的版本之一。

现在编辑下ISAPI_Rewrite的配置(开始 - >所有程序

- >赫利 - >下ISAPI_Rewrite - >的httpd.ini ) ,并添加:

#如果你正在主持一个虚拟目录,使这些线路,

#进入你的虚拟目录的路径。

# UriMatchPrefix / myvirtdir

# UriFormatPrefix / myvirtdir

#将扩展到这个规则,以避免它们被由ASP.NET处理

( * ) ,重写规则\ (CSS | GIF | PNG | JPEG

| JPG | JS |邮编) 。 $ 1 $ 2 [ I,L ]

#正常化的首页网址为/

重写规则将/ home( \ ? * ) ? / $ 1 [ I, RP

, L]

重写规则/ /家[ I]

#前缀的URL与“ rewritten.aspx / ”

,这样ASP.NET处理他们

重写规则/ ( * ) / rewritten.aspx / $ 1 [

I]

这不包括已知的,静态文件( CSS , GIF等)

,但对于其他的,就前缀的URL与/ rewritten.aspx ,使得ASP.NET一命呜呼作为奖励,它的标准化到/ home

/表示任何请求通过301重定向,帮助与你的搜索引擎优化。保存该文件,并重新启动IIS (运行执行iisreset.exe )

这是实施的步骤1

。现在,为了实现第3步,下面的处理程序添加到您的Global.asax.cs文件:

保护无效的Application_BeginRequest

(对象发件人, EventArgs的发送)

{

的HttpApplication应用程序=发件人为的HttpApplication ;

如果(应用程序! = NULL)

如果(

app.Request.AppRelativeCurrentExecutionFilePath ==“ ? /

rewritten.aspx ” )

app.Context.RewritePath (

app.Request.Url.PathAndQuery.Replace

(“/ rewritten.aspx ”,“” )

) ;

}

此检测改写URL和未重写它们。这就行了! (或者至少它的作品在我的机器上

- 请分享您的经验。 )

现在你已经有了IIS 6上干净,无扩展名的URL

(可能在IIS5的,虽然我没有试过) ,而不使用通配符映射,并没有与IIS高效的静态文件处理干扰。

奖励选项5 :升级到Windows Server 2008和IIS

7

当然,这是与IIS 7要容易得多,因为它本身就支持。 NET

IHttpModules

,因此默认情况下你必须UrlRoutingModule插入到正确的服务器,你不必做任何事情奇怪,使其正常工作。

发表在未分类

mvc 路由 .html 404,部署ASP.NET的MVC网站到IIS 6.0中,发现路由无法解析而出现404错误解决方案...相关推荐

  1. vue2.0中的路由传值

    vue2.0中的路由传值 传参的三种基本用法 第一种字符串拼接 //第一步:路由表 src/router/index.js { path: '/user/:userId?', // 传参第一步:在路由 ...

  2. 百度Apollo7.0中的路由段是什么

    百度Apollo是一个自动驾驶开发平台,Apollo 7.0 中的路由段是指由路线规划系统生成的,用于指导车辆行驶的路径.路由段是在地图数据中表示的道路的一部分,并且通常由一系列地理坐标点组成.路由段 ...

  3. vue-router 路由嵌套显示不出来_网络协议|OSI模型第三层网络层中的路由

    的IP协议 OSI第二层中用以太网协议定义了信息传输单元,简称为帧,它长这个样子. 同样的在OSI第三层中,会用 IP 协议去定义信息传输单元,简称为数据包,它长这个样子. 实际上,最终在网络上传输的 ...

  4. centos7+jexus5.8.3部署ASP.NET的MVC项目

    1.在centos7终端以root权限安装jexus5.8.3的独立版 命令:curl https://jexus.org/release/x64/install.sh|sh 2.跳转到目录/usr/ ...

  5. asp.net core 3.1和 .Net 5.0中使用AutoFac作为IoC容器组件

    一.为啥要使用第3方依赖注入框架 ? 1.微软官方提供的依赖注入框架已经很强大,一般情况无需第3方DI容器: 2.但是在一些特殊情况,需要第3方DI容器增强依赖注入功能,一般有如下几种情况: (1) ...

  6. 这本694页的程序员砖头书让你精通ASP.NET Core MVC

    ASP.NET Core MVC是一个来自微软的Web应用程序开发框架,它结合了模型-视图-控制器(MVC)体系结构的有效性和整洁性.敏捷开发的想法和技术,以及.NET平台的最佳部分. 1.1 ASP ...

  7. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...

  8. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门 1

    ASP.NET Core 入门教程 6.ASP.NET Core MVC 视图布局入门 原文:ASP.NET Core 入门教程 6.ASP.NET Core MVC 视图布局入门 一.前言 1.本教 ...

  9. iis 6.0部署asp网站

    IIS 发布步骤 1, 程序->运行->输入inetmgr,打开IIS管理器; 2, 展开左侧树形目录->右击"网站"->新建->网站,打开网站创建向 ...

最新文章

  1. Linux之RPM 软件包管理
  2. 两天入门Python基础(附代码实现)
  3. TLS/SSL协议工作原理
  4. Python自学真的可以学好嘛?
  5. 教师排课程序设计c语言,计算中心
  6. 冒烟测试 SMOKE Test
  7. 权威发布:《麻省理工科技评论》2020年“全球十大突破性技术”
  8. 数值型数据的表示(3.0)
  9. classD类和classAB类功放区别
  10. 图解Ubuntu分区
  11. 风力发电会影响气候?
  12. Spring的第二次模拟考试
  13. 百度地图开发者平台的使用
  14. 需求管理之需求优先级的排序-需求优先级分析方法论-波士顿矩阵和KANO模型
  15. 元数据管理的核心功能及使用?
  16. 【转】【EtherCAT理论】一、EtherCAT现场总线
  17. 老司机教你注册电子邮箱后,如何搬迁邮箱!
  18. Airbnb JavaScript Style Guide
  19. Python--shutil模块细说
  20. 我把视频变成链接_如何把小红书视频保存到电脑上

热门文章

  1. 3种常用的缓存读写策略详解
  2. 产假计算器php代码
  3. Linux创建用户命令与删除用户命令
  4. T100常用的Debug命令和XShell常用命令
  5. 图深度学习--图论基础
  6. win7 安装ssms 18.0提示 出错了!“无法建立到信任根颁发机构的证书链”
  7. python将10到1递减_递归地将列表递减1
  8. 拉线援(AD PADS Cadence快捷键汇总)
  9. 索尼ST18i刷机包 源于官方 感知流畅 深度精简 极度省电 稳定版上市
  10. 电大计算机应用小抄,电大--计算机应用小抄.doc