博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinServer2008R2 + IIS 7.5 + .NET4.0 经典模式 运行WebAPI程序报404错误的解决方案
阅读量:5030 次
发布时间:2019-06-12

本文共 4744 字,大约阅读时间需要 15 分钟。

在Windows Server 2008 R2系统下,IIS 7.5 + .NET Framework 4.0的运行环境,以经典模式(Classic Mode)部署一个用.NET 4.0编译的 WebAPI 程序。

这是非常简易的一个Demo,只有一个TestController和WebApiConfig,并且已确保在Global.asax的Application_Start事件中调用WebApiConfig注册路由,大体如下:

1 using System; 2 using System.Web.Http; 3  4 namespace WebAPI 5 { 6     public class Global : System.Web.HttpApplication 7     { 8         protected void Application_Start(object sender, EventArgs e) 9         {10             WebApiConfig.Register(GlobalConfiguration.Configuration);11         }12     }13 }
Global
1 using System.Web.Http; 2  3 namespace WebAPI 4 { 5     public static class WebApiConfig 6     { 7         public static void Register(HttpConfiguration config) 8         { 9             //配置路由10             config.Routes.MapHttpRoute(11                 name: "DefaultApi3",12                 routeTemplate: "api/{controller}/{action}/{id}",13                 defaults: new { id = RouteParameter.Optional }14             );15 16             config.Routes.MapHttpRoute(17                 name: "DefaultApi2",18                 routeTemplate: "api/{controller}/{action}"19             );20             21             config.Routes.MapHttpRoute(22                 name: "DefaultApi1",23                 routeTemplate: "api/{controller}/{id}",24                 defaults: new { id = RouteParameter.Optional }25             );26         }27     }28 }
WebApiConfig
1 using System; 2 using System.Collections.Generic; 3 using System.Web.Http; 4  5 namespace WebAPI.Controllers 6 { 7     public class TestController : ApiController 8     { 9         // GET api/test10         public IEnumerable
Get()11 {12 return new string[] { "value1", "value2", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") };13 }14 15 // GET api/test/516 public string Get(int id)17 {18 return "value";19 }20 21 // POST api/test22 public void Post([FromBody]string value)23 {24 }25 26 // PUT api/test/527 public void Put(int id, [FromBody]string value)28 {29 }30 31 // DELETE api/test/532 public void Delete(int id)33 {34 }35 }36 }
TestController
1 
2 3
7 8
9
10
11
12 13
14
15
16
17
18
19
20
21
22
23
web.config

 本地IIS 7.5是没有问题的,直接访问localhost/api/test,成功输出XML格式的数据。

但是发布上去之后,却报404错误。

搜了一些解决方案,都是比较片面不全的,没一个能起作用。

比如,让我们在<system.webServer>节点下加<modules>或<validation>或两个都加上,像这样:

1 
2 3
7 8
9
10
11
12 13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

又或者,让我们在站点的处理程序映射里添加通配符脚本映射,像这样:

按照上面这些做完之后,还是不行,百思不得其解。

最后几经折腾,终于解决!!!

流程如下:

第一步,更改WebAPI站点的web.config文件:

1 
2 3
7 8
9
10
11
12 13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
web.config

第二步,无论是否确定已注册,都再注册一次:

Win+R键输入cmd确定,打开命令提示符(Win7以上系统都需要以管理员身份运行,且当前登录账户最好是Administrator)。

依次输入如下命令,并且按确定,等待执行完毕:

cd /d %windir%\Microsoft.NET\Framework\v4.0.30319

aspnet_regiis -i

如果服务器是64位系统,你还需要输入如下命令:

cd /d %windir%\Microsoft.NET\Framework64\v4.0.30319

aspnet_regiis -i

第三步,清理IIS站点垃圾(缓存):

 在资源管理器中,打开%windir%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files文件夹

删除该文件夹下的所有文件和文件夹,root文件夹除外,但root文件夹下的文件和文件夹也要删除。

如果碰到无法删除,提示权限不足或该文件/文件夹被占用之类的,请先停止IIS服务(在运行窗口或cmd窗口输入iisreset /stop可以停止IIS服务),再重试删除。

第四步,重启服务器。

第五步,在运行窗口或cmd窗口输入iisreset /start启动IIS服务,接着访问yourserver.com/api/xxx,成功响应并且返回数据,大功告成!!!

 

转载于:https://www.cnblogs.com/VAllen/p/http-404-page-not-found-in-web-api-hosted-in-iis-7-5.html

你可能感兴趣的文章
CF1009G Allowed Letters
查看>>
Max Points on a Line
查看>>
自动化测试之if __name__ == '__main__'未运行
查看>>
新奇特 技术 Python 将图片转化为 HTML 页面
查看>>
java常用工具类(二)
查看>>
00045_多态-转型
查看>>
VS项目中使用Nuget还原包后编译生产还一直报错?
查看>>
Servlet 生命周期、工作原理
查看>>
微信公共平台开发-(.net实现)4--发送图文消息
查看>>
材料知识--电池电极
查看>>
springMVC + spring + mybatis (SSM)合集
查看>>
python new和init知识点
查看>>
在SharePoint 2010中修改XsltListViewWebPart显示字段样式
查看>>
Centos6.5ifconfig不显示ip问题
查看>>
T-SQL语句学习(一)
查看>>
装箱拆箱(一)
查看>>
Python3 PyMySQL 的使用
查看>>
11个审查Linux是否被入侵的方法
查看>>
CentOS6.7源码安装MySQL5.6
查看>>
android Bitmap总结
查看>>