在IIS上托管应用程序后无法命中API

时间:2016-05-27 11:16:57

标签: c# asp.net-mvc iis asp.net-web-api

我创建了一个非常基本的Web API项目。当我从VS运行应用程序并点击像http://localhost:57401/users/getmessage这样的网址时,我能够得到响应。我在IIS上托管并提供绑定后,我无法点击相同的URL。我收到404错误。我点击的网址是http://testapi.com:6060/users/getmessage,这会得到一个404.如果我点击http://testapi.com:6060/Default.html,我会在没有任何错误的情况下获得该网页。 404错误仅适用于api。这是我用于控制器方法的路由属性:

[Route("users/getmessage/"), HttpGet]

和WebApiConfig.cs就像:

 public static void Register(HttpConfiguration config)
    {
        config.EnableCors();
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));
    }

可能有什么不对?我在哪里弄错了?

这是IIS映像。IIS Manager

2 个答案:

答案 0 :(得分:1)

这最近发生在我身上,结果证明路线模板妨碍了我。

您现在已经将“api / {controller} / {action} / {id}”作为路线模板。所以当你调试时,你会用“http://localhost:2342/api/users/getmessage”之类的东西来点击它,它会起作用。

在IIS中安装时,使用“API”作为应用程序名称,因此在IIS上,获取服务的URL为“http://localhost/API”。

因此,在IIS上托管时,您需要进行相同的调用 “http://localhost/API/api/users/getmessage”。

您可以通过从路径模板前面删除“api /”来修复它。然后它会像你期望的那样工作。

答案 1 :(得分:-1)

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }

);

请在url route config中添加操作名称。