子目录应用程序中的web api

时间:2016-04-26 18:01:22

标签: asp.net angularjs asp.net-web-api2

我正在创建一个包含各种应用程序链接的中心站点,这些应用程序都存储在主中心站点下的子目录中。其中一个应用程序有一个web api,在localhost上调试时工作正常。但是,当我发布到子目录时,我在尝试命中api时遇到404错误。基于其他问题,我确保在IIS中为子目录“创建应用程序”。这是我的第一次网络API尝试,我不知道还有什么可以尝试,甚至我应该提供什么其他信息来澄清问题。

中心网站:apps.somesite.com
应用网站:apps.somesite.com/someapp /

工作api :localhost:12345 / api / tasks

404无法运行api,应用会自动尝试使用此:apps.somesite.com/api/tasks
404无效api,我在中键入此内容:apps.somesite.com/someapp/api/tasks(< / p>

这是我的控制器:

namespace TaskTracker.Controllers
{
    [RoutePrefix("api")]
    public class TasksController : ApiController
    {

        ModelEntities taskTrackerApi = new ModelEntities();

        // Returns a list of all tasks
        [Route("tasks")]
        [HttpGet]
        public IEnumerable<taskTracker_getTasks_Result> getTasks()
        {
            return taskTrackerApi.taskTracker_getTasks().AsEnumerable();
        }

        // To create a new task
        [Route("add/{arkona}")]
        [HttpPost]
        public int addTask(string arkona)
        {
            return taskTrackerApi.taskTracker_addTask(arkona);
        }

        // To update a task
        [Route("update")]
        [HttpPut]
        public int updateTask([FromBody]TaskTracker.Models.Task task)
        {
            int id = task.Id;
            string taskName = task.TaskName;
            string link = task.Link;
            DateTime lastUpdate = task.LastUpdate;
            string lastUpdatedBy = task.LastUpdatedBy;
            DateTime dueDate = task.DueDate;
            string notes = task.Notes;

            return taskTrackerApi.taskTracker_updateTask(id, taskName, link, lastUpdate, lastUpdatedBy, dueDate, notes);
        }

        // To delete a task
        [Route("delete/{id:int}")]
        [HttpDelete]
        public int deleteTask(int id)
        {
            return taskTrackerApi.taskTracker_deleteTask(id);
        }

        // Returns a list of the dealerships
        [Route("dealers")]
        [HttpGet]
        public IEnumerable<taskTracker_getDealers_Result> getDealers()
        {
            return taskTrackerApi.taskTracker_getDealers().AsEnumerable();
        }

    }
}

这是我的api配置:

namespace Task_Tracker
{
    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}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Use camelcase for JSON data
            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        }
    }
}

最后,这是我的角色服务来调用api:

app.service('taskService', ['$http', function ($http) {

    this.getTasks = function () {
        return $http.get('/api/tasks');
    };

    this.createTask = function (arkona) {
        return $http.post('/api/add/' + arkona);
    };

    this.updateTask = function (task) {
        return $http.put('/api/update', task);
    };

    this.deleteTask = function (id) {
        return $http.delete('/api/delete/' + id);
    };

    this.getDealers = function () {
        return $http.get('/api/dealers');
    };

}]);

1 个答案:

答案 0 :(得分:0)

最终出现了两个问题。一,该应用程序正在发布到一个过旧版本的IIS;两个,我需要删除我的angularjs http get call上的前导斜杠。

<强>不正确:

return $http.get('/api/tasks');

<强>正确:

return $http.get('api/tasks');