托管ASP.NET MVC应用程序以在IIS 5(6或7)上工作的最佳方法是什么。 当我尝试发布ASP.NET MVC应用程序时,似乎只有404错误。 我做了一些谷歌搜索,找到了一些解决方案,但是似乎都不是很优雅,而且我担心一旦我开始为应用程序使用共享托管环境,它们是否将无法使用。
解决方案1
Right-click your application virtual directory on inetmgr.exe.
Properties->Virtual Directory Tab-> Configuration.
Add a new mapping extension. The extension should be .*, which will be
mapped to the Executable
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,
or the appropriate location on your
computer (you can simply copy this
from the mapping for .aspx files). On
the mapping uncheck"check that file
exists".
3 X OK and you're good to go.
If you want, you can apply this setting to all your web sites. In
step1, click on the"Default Web Site"
node instead of your own virtual
directory, and in step 2 go to the
"Home Directory" tab. The rest is the
same.
通过ASP.NET路由所有内容似乎有点技巧。
解决方案2
编辑MVC路由以在URL中包含.mvc,然后根据此扩展名遵循解决方案1中的步骤。 编辑:原始图像链接丢失了,但是这里来自Google的缓存:
答案在这里
If *.mvc extension is not registered
to the hosting , it will give 404
exception. The working way of hosting
MVC apps in that case is to modify
global.asax routing caluse in the
following way.
routes.Add(new
Route("{controller}.mvc.aspx/{action}",
new MvcRouteHandler()) {
Defaults = new RouteValueDictionary (new{ controller
="YourController"} ) });
In this way all your controller
request will end up in *.mvc.aspx,
which is recognized by your hosting.
And as the MVC dlls are copied into
your local bin , no special setttings
need to be done for it.
我认为无论哪种方式,您都必须执行解决方案1。
考虑HTTP请求管道。
一个请求进入IIS。
IIS检查端口/主机头,以查看它是否设置了一个网站来捕获对该主机头/端口的请求。
IIS研究请求的文件扩展名(.php,.asp,.aspx),并将其交给可处理该类型请求的ISAPI。
仅在这一点上,ASP.NET(或PHP运行时)才会启动。如果IIS没有该映射,则它将永远不会将请求传递给ASP.NET运行时,并且该请求将永远不会到达您的代码。这就是为什么您需要将该glob(*)映射到ASP.NET ISAPI的原因。
ASP.NET MVC框架的URL通常以根本没有文件扩展名结尾。如果希望这些请求由ASP.NET(或某些其他运行时)处理,则必须映射所有请求,而不管该ISAPI(即aspnet_isapi.dll)的文件扩展名如何。
对于需要提供媒体服务(例如.webp,.webp)的HttpHandler,通常也可以这样做。为了使处理程序起作用,即使.webp不是"常规" ASP.NET文件扩展名,也需要将其映射到您的代码。
HTH,
泰勒
跑:
C: WINDOWS Microsoft.NET Framework v4.0.30319 aspnet_isapi.dll -i
这将为aspnet用户重置IIS注册表设置。
创建虚拟目录:
1.右键单击要转换的目录
-
选择属性
-
在目录下,选择创建。
-
在配置下,选择添加。
-
对于可执行插入:
C: WINDOWS Microsoft.NET Framework v4.0.30319 aspnet_isapi.dll
对于扩展名插入:。*
记录用户名,即:IUSR_AVSJ82S
设置物理目录的共享权限:
-
在Windows资源管理器中,转到已转换为虚拟目录的物理目录。
右键单击目录名称
-
选择属性
-
在安全性标签下,选择添加
-
输入IIS用户名,即:IUSR_AVSJ82S单击检查名称。
-
点击确定
-
将权限设置为"读写"。
仅供参考:在服务器2003(正在开发必须连接到RPS的应用程序)上,它不允许我添加扩展名*,我使用了替代解决方案来修改route子句,并且
工作了。
您是否尝试过将.aspx添加到控制器名称的末尾?
它适用于Stack Overflow问题,在哪里可以得到ASP.NET MVC托管?