首页 > 解决方案 > 当应用程序作为默认网站下的 Web 应用程序发布到 IIS 时,Web API 操作的 URI 不起作用

问题描述

我已将 Web API 2 添加到现有的 MVC 5 Web 应用程序中。我使用此 Web API 的方法将 JSON 数据返回到 MVC 视图。

这是视图内的 ajax 调用示例:

$.getJSON('@Url.RouteUrl("DefaultApi"
    , new { httproute = true, controller = "Data", action = "GetMyData" })'
    , function (data) {
        ... do sth with returned json data here ...
    });

这是在客户端生成的代码:

$.getJSON("/api/Data/GetMyData", function (data) { ...

这就是 WebApiConfig.cs 文件的样子:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // 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 }
        );
    }
}

当我从 Visual Studio 调试时,一切正常。但是,当我将应用程序作为“默认网站”下的应用程序部署到 IIS 时,所有指向 Web API 操作方法的链接都被破坏了。

换句话说$.getJSON("/api/Data/GetMyData", function (data) { ...,当我从 Visual Studio 启动调试会话时工作正常,但在将应用程序部署到 IIS 时返回 404 错误。

当我输入

http://localhost/myAppVirtualPath/api/data/GetMyData

直接在浏览器的地址行中,我按预期返回结果。

好像需要在URI中的'/api'之前添加应用程序的虚拟路径。但@Url.RouteUrl("DefaultApi"未能如愿。我在这里有什么明显的遗漏吗?我想有,但它可能是什么?

标签: c#asp.net-mvcasp.net-mvc-5routingasp.net-web-api2

解决方案


推荐阅读