【发布时间】:2015-05-21 10:26:49
【问题描述】:
我正在使用 asp.net mvc 5 和 web api 2。对于 asp.net mvc 5 项目,我一切正常...但是新的我正在尝试添加 web api 2 路由...当我使用区域时.
我有 web api 2 控制器在项目根目录工作:
//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")
};
}
}
}
所以我假设我的Global.asax、我的routeconfig.cs 和我的webapiconfig.cs 是正确的......(未显示)......
但现在我正试图让我的 AREAS 中的 web api 2 工作......
我已经阅读了我在网上可以找到的所有内容,这似乎应该 工作:
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 }
);
}
}
}
我的控制器代码是:
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();
}
}
}
我已经尝试了带有和不带有属性命名[Route]的控制器...
而且我也不能去上班……
简单案例
public HttpResponseMessage Get()
和“真实”案例
public IEnumerable<VwAuditModel1> GetAuditModels()
返回相同的结果。在浏览器中,使用
http://localhost:64167/WorkOrder/api/AuditModelApi
和
http://localhost:64167/WorkOrder/api/AuditModelApi/AuditModels
我得到以下信息:
<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>
【问题讨论】:
-
将 webapiconfig.cs 代码添加到您的帖子中。这就是我假设你缺少注册属性路由的地方。
标签: asp.net-mvc-5 asp.net-mvc-routing asp.net-web-api2 asp.net-mvc-areas