c# - 当应用程序作为默认网站下的 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"
未能如愿。我在这里有什么明显的遗漏吗?我想有,但它可能是什么?
解决方案
推荐阅读
- java - java如何在内部将任何类型的文件(图像、pdf等)转换为字节数组?
- ag-grid - 访问 ag-grid 列可见性事件完成
- laravel-5.3 - 检索存储在 storage 文件夹中的 json 文件
- javascript - Node.js - 使用 PKG 创建可执行文件
- c# - 需要帮助来根据 C# 中的子项计数对我的数据集执行批处理
- docker - Windows10 主页上的 Docker - 在 docker 容器内连接到 docker 引擎
- mysql - 从库存数据库中高效查询产品变体(避免 EAV)
- javascript - 确保用户在更新后获得最新版本网站的正确方法
- python - 根据 pandas 的每日回报计算每月回报(加元)
- html - 更改字体真棒圆圈图标的背景颜色