getJSON Web API适用于Development Server,但IIS Express 7.5会抛出404 Not found

时间:2013-06-25 21:25:31

标签: 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)

WebApiConfig

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

的getJSON

$.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中没有正确设置会阻止它吗?

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

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");
}

1 个答案:

答案 0 :(得分:4)

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