我正在创建一个包含各种应用程序链接的中心站点,这些应用程序都存储在主中心站点下的子目录中。其中一个应用程序有一个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');
};
}]);
答案 0 :(得分:0)
最终出现了两个问题。一,该应用程序正在发布到一个过旧版本的IIS;两个,我需要删除我的angularjs http get call上的前导斜杠。
<强>不正确:强>
return $http.get('/api/tasks');
<强>正确:强>
return $http.get('api/tasks');