404访问Web API 2服务时出错

时间:2015-08-12 15:47:06

标签: c# asp.net iis asp.net-web-api2

我有一个WebAPI2 Web服务,可以在我的DEV站点和本地登台站点上运行,但是当我推向生产时,我在尝试访问相同的服务时遇到404错误。

以下是问题的一个例子......

// production server returns 404 Error
http://my.servername.com/AppAPI/CustomerAPI/Session/4 

// local stage site works 
http://localhost:100/AppAPI/CustomerAPI/Session/4

我知道404可能会产生多种原因。首先想到了不好的路线,似乎是我在研究中看到的大多数404问题的根源。我正在使用WebAPI 2属性路由,如控制器代码中所示...

public class SessionController : ApiController
{
    [Route("CustomerAPI/Session/{id}")]
        [HttpGet]
        public string Get(int id)
        {
            return "value";
        }
}

在IIS上,服务所在的站点在另一个站点(my_servername_com)下设置为“应用程序”(AppAPI)。

IIS上的网站结构看起来像......

* Server
  + Application Pools
  + Sites
    + my_servername_com
      + AppAPI (application)
        + bin
        - default.aspx
        - global.asax
        - web.config

如您所见,我在网站中添加了一个测试页面; 的Default.aspx 。此页面在两个位置上正确显示,因此我知道该站点正在运行且可访问且至少根网址是正确的。在本地站点上可以访问服务这一事实告诉我路由也已正确设置。

http://localhost:100/AppAPI/default.aspx     -- works
http://my.servername.com/AppAPI/default.aspx -- works

排除了我能想到的任何编码或路由问题,它给我留下了某种环境问题。我已经完成了两台服务器上的IIS设置,它们看起来是一样的,所以我不确定还有什么可以看的。

我的当地环境(工作)......

OS: Windows 7 Professional
IIS: IIS 7 (7.5.7600.16385)
.NET Framework : .NET 4.5 (4.5.50938)

我的制作环境(不起作用)......

OS: Windows Web Server 2008
IIS: IIS 7 (7.0.6000.16386)
.NET Framework: .NET 4.5 (4.5.51209)

所以我认为我有两种可能性......

  1. 网络问题? - 我不确定这里可能出现什么问题。一个 在我的驾驶室外面。
  2. 有些被忽视的配置?
  3. 在做了一些进一步的研究后,我发现围绕global.asax和WebApiConfig存在许多问题。由于它似乎相关,我在这里添加了它们,但重要的是要注意这是不是 MVC应用程序。

    我没有创建一个WebApiConfig类,但创建了一个名为“Routing.cs”的类,它执行相同的操作。这只是启用属性路由。

    public class Routing
    {
        public static void RegisterRoutes(HttpConfiguration config)
        {
    
            // enable attribute routing
            // http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
            config.MapHttpAttributeRoutes();
        }
    }
    

    当然,这只是在global.asax中调用。

        protected void Application_Start(object sender, EventArgs e)
        {
            GlobalConfiguration.Configure(Routing.RegisterRoutes);
        }
    

    任何人可能会流下的光都会有所帮助。我是出于想法。下一步将是重写ASMX中的服务......呃......我不想这样做!

    谢谢, ģ

2 个答案:

答案 0 :(得分:2)

从这个链接:
THIS

检查您是否有" runAllManagedModulesForAllRequests"在web.config中为true。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">

答案 1 :(得分:0)

检查IIS中处理程序的顺序:  ExtensionlessUrlHandler-Integrated-4.0应该先于StaticFile,否则您的api调用将由StaticFile处理,结果为404。

IIS -> Website -> Handler Mappings -> View Ordered List

如果您在web.config中不需要StaticFile处理程序,则可以将其删除:

<handlers>
  <remove name="StaticFile"/>      
</handlers>

还有一个类似的线程here