Sto usando asp.net mvc 5 e web api 2. Per il progetto asp.net mvc 5 ho tutto funzionante ... ma nuovo sto cercando di aggiungere web api 2 percorsi ... quando sto usando le aree.web api 2 percorsi area
ho il controller Web API 2 di lavoro alla base del progetto:
//this is working
namespace EtracsWeb.Controllers
{
public class TestController : ApiController
{
//localhost:port/api/test ...this is working
[HttpGet]
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent("GET: Test message")
};
}
}
}
Quindi io parto dal presupposto mia Global.asax
, la mia e la mia routeconfig.cs
webapiconfig.cs
sono corretti ... (non mostrato) ...
Ma ora sto cercando di ottenere il web API 2 nelle mie aree di lavoro ...
ho letto tutto quello che potevo trovare sul web e questo sembra che dovrebbe lavoro:
namespace EtracsWeb.Areas.WorkOrder
{
public class WorkOrderAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "WorkOrder";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.MapHttpRoute(
name: "AuditModel_Api",
routeTemplate: "WorkOrder/api/AuditModelApi/{id}",
defaults: new { id = RouteParameter.Optional }
);
//default
context.Routes.MapHttpRoute(
name: "WorkOrder_Api",
routeTemplate: "WorkOrder/api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
context.MapRoute(
"WorkOrder_default",
"WorkOrder/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
Il mio codice di controllo è:
namespace EtracsWeb.Areas.WorkOrder.ApiControllers
{
public class AuditModelApiController : ApiController
{
IManufacturerStopOrderModelService auditModelService = new WorkOrder.Services.VWAuditModelService(UserSession.EtracsUserID, UserSession.ProgramID, UserSession.EtracsSessionID, UserSession.ConnectionString);
[HttpGet]
[Route("AuditModelApi")]
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent("GET: Test message")
};
}
[Route("AuditModelApi/AuditModels")]
public IEnumerable<VwAuditModel1> GetAuditModels()
{
return auditModelService.GetModels();
}
public IHttpActionResult UpdateAuditMode()
{
//example of what can be returned ... NotFound, Ok ... look into uses...
VwAuditModel1 result = new VwAuditModel1();
return Ok(result);
return NotFound();
}
}
}
Ho provato il controller con e senza l'attributo di denominazione [Route]
... e non posso ottenere sia mettersi al lavoro ...
Sia il semplice caso
public HttpResponseMessage Get()
e il caso "reale"
public IEnumerable<VwAuditModel1> GetAuditModels()
restituiscono lo stesso risultato. Dal browser, utilizzando
http://localhost:64167/WorkOrder/api/AuditModelApi
e
http://localhost:64167/WorkOrder/api/AuditModelApi/AuditModels
ottengo il seguente:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:64167/WorkOrder/api/AuditModelApi/AuditModels'.
</Message>
<MessageDetail>
No route providing a controller name was found to match request URI 'http://localhost:64167/WorkOrder/api/AuditModelApi/AuditModels'
</MessageDetail>
</Error>
aggiungi webapiconfig.cs codeto ur post. Quello che manca per registrare le rotte degli attributi presumo. –