jquery - getJSON Web API 可在开发服务器上运行,但 IIS Express 7.5 抛出 404 未找到

标签 jquery asp.net-web-api iis-7.5

使用 Visual Studio 2012 及其 ASP.NET 开发服务器,对于我第一次涉足 ASP.NET 来说,一切似乎都运行良好。我的 Web API 调用使用 jquery 返回的数据。在部署到 IIS Express 7.5 以开始学习身份验证/授权时,我在 getJSON 调用中遇到了障碍:

GET http://localhost/api/OSList 404 (Not Found)

WebApi配置

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

获取JSON

$.getJSON("/api/OSList", null)
    .success(
        function(data) {
            var mappedOs = $.map(data, function(item) {
                return new Os(item.ID, item.Name, item.PatchLevel);
            });
            self.OSs(mappedOs);
        }
    );

这一切都在开发服务器上运行...是否是我在 IIS 中没有正确设置的东西会阻止此操作?

编辑:添加了 Controller 代码,这对我来说显然是一个错误。这是默认的开发工作室自动生成的。

public class OSListController : ApiController
{
    private readonly TrendDataEntities _db = new TrendDataEntities();

    // GET api/OSList
    public IEnumerable<OS> GetOS()
    {
        return _db.OS.AsEnumerable();
    }
}

HomeController 使用:

public ActionResult OSList()
{
    ViewBag.Title = "OS List";
    ViewBag.Message = "";
    return View("~/Views/Home/Admin/OSList.cshtml");
}

最佳答案

Visual Studio 开发服务器在特定端口上运行您的应用程序,以便 http://localhost:<port>/api/OSList将工作。如果将应用程序部署到 IIS,您的应用程序不会与其他应用程序一起在专用端口上运行,而是在 80(默认情况下)上运行。在这种情况下,您的 URI 还必须包含您的应用程序名称。因此,如果您的应用程序名称是 MyWebApi,那么您的 URI 必须是 http://localhost/mywebapi/api/OSList 。 getJSON 必须类似于 $.getJSON("/mywebapi/api/OSList", null) .

关于jquery - getJSON Web API 可在开发服务器上运行,但 IIS Express 7.5 抛出 404 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307824/

相关文章:

jquery - 是什么导致布局中断?尝试做一个水平布局的网站

javascript - 如何使用json数据进行循环?

c# - 在 Web API 中序列化动态类型

asp.net - 事件处理程序可能不会在 IIS 7 或 IIS 7.5 集成模式的默认文档中引发?

jquery - 父元素可见后,iOS 上的 VoiceOver 不会将焦点放在子元素上

javascript - jQuery 仅当设置或更新 2 个输入和 1 个选择时如何调用函数?

c# - InRequestScope 无法在 ExceptionLogger 上下文中工作

c# - Web API 和 Angular 5 token 身份验证 - 登录后获取用户信息

IIS 网站与应用程序

asp.net - 为什么使用 ASP.NET OutputCache 不断返回 200 OK,而不是 304 Not Modified?