如何在托管的web api上解决404错误

时间:2014-01-21 12:29:34

标签: asp.net-web-api

您是jquery mobile和web api的新手,我目前正在开发一个同时使用这两者的项目。我已经在我的IIS7中托管了应用程序我无法访问我的控制器的问题,当我尝试这样做时,我总是得到404错误。在我的开发机器上它工作正常。我已经查看了堆栈上的一些答案,而不是它们似乎正在工作。任何帮助PLZ

见下面的代码

WebApiConfig.cs

config.MapHttpAttributeRoutes();

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

我的控制器

public class ManufacturerController : ApiController
{
    private List<Manufacturer> manufacturers = new List<Manufacturer>();
public ManufacturerController()
    {

        manufacturers.Add(new Manufacturer(1, "AUDI"));
        manufacturers.Add(new Manufacturer(2, "BMW"));
        manufacturers.Add(new Manufacturer(3, "MAZDA"));
        manufacturers.Add(new Manufacturer(4, "NISSAN"));
        manufacturers.Add(new Manufacturer(5, "FORD"));
}

public IEnumerable<Manufacturer> GetManufacturers(string manufacturerSearch)
  {
      var _products = manufacturers.Where(p => p.Name.Contains(manufacturerSearch.ToUpper()));


            return _products;

    }

我的Jquery移动自动填充代码

(document).on("pageinit", function () {

//manufacturer search
$("#manufacturer").on("listviewbeforefilter", function (e, data) {
    var $ul = $(this),
        $input = $(data.input),
        value = $input.val(),
        html = "";
    $ul.html("");
    if (value && value.length > 0) {
        $ul.listview("refresh");
        $.ajax({
            beforeSend: function() {
                $ul.html('<h4>Loading...</h4>');
            },
            url: "http://my_server/api/manufacturer/?manufacturerSearch=" + value,
            //timeout: 3000,
            dataType: "jsonp",
            crossDomain: true,
            data: {
                q: $input.val()
            },
            error: function (xhr, errorType) {
                //if (errorType === "error") {
                    //showError(xhr.status, xhr.statusText);
                //$input.val("");
                alert("Error: " + xhr.status + "," + xhr.statusText);
                //}
            }
        })
        .then(function (response) {
            $.each(response, function (i, val) {
                html += "<li id='" + val.Id + "'>" + val.Name + "</li>";
            });
            $ul.html(html);
            $ul.listview("refresh");
            $ul.trigger("updatelayout");
            $ul.find('li').on("click", function () {
                $input.val($(this).text());
                selectedManufacturerId = getId(this);
                $("#manufacturer").empty();
            });
        });
    }
});

提前致谢

1 个答案:

答案 0 :(得分:1)

使用Visual Studio,您通常会使用这样的URI - http://localhost:<port>/api/manufacturer。在IIS中部署它时,删除端口和更改主机名是不够的。您将在IIS中将应用程序部署为应用程序。这通常是您的项目名称。因此,正确的URI将为http://myserver/myapp/api/manufacturer