无法调用IIS上注册的Web API

本文关键字:Web API 注册 调用 IIS | 更新日期: 2023-09-27 18:18:09

我创建了一个Web API,它返回一个简单类型Product的列表。控制器为:

    Product[] products = new Product[] 
    { 
        new Product { Id = 1, Name = "Rice", Category = "Groceries", Price = 1 }, 
        new Product { Id = 2, Name = "Dress", Category = "Clothes", Price = 3.75M }, 
        new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
    };
    public IEnumerable<Product> GetAllProducts()
    {
        return products;
    }

当我从同一解决方案中的页面调用时,API正在工作,将web API称为' API/products'

<script type="text/javascript">
 var uri = 'api/products';
 $(document).ready(function () {
   $.getJSON(uri)
     .done(function (data) {
        $.each(data, function (key, item) {
          $('<li>', { text: formatItem(item) }).appendTo($('#products'));
                });
            });
    });

但是当我在IIS服务器上注册API时,url 'http://localhost:8290/api/products'并在客户端应用程序中使用类似的ajax调用API。

<script type="text/JavaScript">
    var uri = "http://localhost:8290/api/products";
    $(document).ready(function () {
        $.getJSON(uri)
            .done(function (data) {
                $.each(data, function (key, item) {
                    $('<li>', { text: formatItem(item) }).appendTo($('#products'));
                });
            })
            .fail(function (jqXHR, textStatus, err) {
                $('#product').text('Error: ' + err);
            });
    });

其他restful api以类似的方式工作得很好。我不知道我在这里错过了什么。任何帮助都会很感激。问候。

无法调用IIS上注册的Web API

看来问题出在url

var uri = "http://localhost:8290/api/products";

托管在IIS中,所以url中的虚拟目录名丢失。它应该是这样的:

var uri = "http://localhost/YourVirtualDirectory/api/products";