2016-04-26 9 views
0

Ich erstelle eine Hub-Site mit Links zu verschiedenen Anwendungen, die alle in Unterverzeichnissen unter der Haupt-Hub-Site gespeichert sind. Eine dieser Anwendungen hat eine Web-API, die beim Debuggen auf localhost funktioniert. Wenn ich jedoch im Unterverzeichnis veröffentliche, erhalte ich einen 404-Fehler, wenn ich versuche, die API zu treffen. Aufgrund anderer Fragen habe ich dafür gesorgt, dass in IIS eine Anwendung für das Unterverzeichnis erstellt wurde. Dies ist mein erster Web-API-Versuch und ich weiß nicht, was ich noch versuchen soll oder welche anderen Informationen ich geben sollte, um das Problem zu klären.Web-API im Unterverzeichnis Anwendung

Hubstandort: apps.somesite.com
app Ort: apps.somesite.com/someapp/

Arbeits api: localhost: 12345/api/tasks

404 nicht funktioniert api, App automatisch versucht, dieses zu verwenden: apps.somesite.com/api/tasks
404 nicht funktioniert api, ich tippe dieses in: apps.somesite.com/someapp/api/tasks (

Hier ist mein Controller:

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

    } 
} 

Hier ist meine api config:

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

Schließlich, hier ist mein Dienst in eckig Rufen Sie die 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

im IIS-Manager, wählen Sie den Ordner, in dem Sie Ihre API-Anwendung setzen. Klicken Sie dann auf der rechten Seite des Fensters unter "Anwendung durchsuchen" auf "Durchsuchen ...". Ist die URL, die Sie zu der gleichen URL führt, die Sie verwenden möchten, wenn Sie den 404 erhalten? –

+0

Nun, es bringt mich auf die Standard-HTML-Seite für die App, und das lädt gut. Aber die Seite hat einen Fehler, der ein 404 für die api-Route ist. – psnoonan

Antwort

0

Es gab am Ende zwei Probleme. Zum einen wurde die App in einer zu alten Version von IIS veröffentlicht. und zwei, ich musste den führenden Schrägstrich auf meinem angularjs http get Aufruf entfernen.

Falsch:

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

Richtig:

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