【问题标题】:Unable to hit API after application is hosted on IIS应用程序托管在 IIS 上后无法访问 API
【发布时间】:2016-05-27 11:16:57
【问题描述】:

我创建了一个非常基本的 Web API 项目。当我从 VS 运行应用程序并点击http://localhost:57401/users/getmessage 之类的网址时,我能够得到响应。在我将它托管在 IIS 上并提供绑定后,我无法访问相同的 url。我收到 404 错误。我点击的 URL 是 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 映像。

【问题讨论】:

  • 这些路由问题很痛苦,我承认。你可以试试:testapi.com:6060/users/users/getmessage
  • 我希望你的 API 直接发布在你的服务器端口 6060 上的网站上,即在网站 -> 下(当你展开这个你可以看到 bin 文件夹等)?如果没有,您可以共享 IIS 管理器的文件夹结构。
  • @RyanPeters 不。它工作得不好。
  • @RaviA。我可以看到应用程序下的 bin 文件夹。
  • 如果你能分享 IIS 管理器的图像,那就太好了。除此之外,我希望您已经安装了所有必要的组件(应用程序开发功能),尽管如果缺少某些安装,您不会看到 404。您可以尝试启用 FREB (iis.net/learn/troubleshoot/using-failed-request-tracing/…) 并查看扩展少处理程序是否实际被调用。

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


【解决方案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/”来修复它。然后它会像你期望的那样工作。

【讨论】:

    【解决方案2】:
    config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
    

    );

    请在 url 路由配置中添加动作名称。

    【讨论】:

    • 我做了更改,但没有效果。错误保持不变。请检查我更新的问题以获取 WebApiConfig.cs 文件中的完整配置。谢谢。
    • /api/users/getmessage 请使用这个我认为你错过了无法正常工作的 api 路由。
    • config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/v1/{controller}/{action}/{id}", 默认值: new { controller = "Test1", action = "Get", id = RouteParameter.Optional } );
    • 这是我当前在 api 中的设置,所以可以这样使用
    • 请从您的控制器中删除 [Route("users/getmessage/"), HttpGet]。
    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 2016-07-01
    • 2019-08-29
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2018-10-08
    相关资源
    最近更新 更多