我已经尝试了一段时间来制作休息api端点。但是,当我测试时,它表示"无法找到资源。"在网络浏览器中。
这是我的控制器(部分)。该方法无法访问。
[System.Web.Http.RoutePrefix("api/ticket")]
public class TicketController : ApiController
{
private readonly ITicketService _TicketService = new TicketService();
[System.Web.Mvc.HttpGet]
[System.Web.Mvc.Route("Prepare/{number:string}")]
public TicketViewModel Prepare(string number)
{
...
}
}
这是我从RouteConfig注册的路线:
routes.MapRoute(
name: "Default api with parameter",
url: "api/{controller}/{action}/{number}",
defaults: new {
controller = "Ticket",
action = "Prepare",
number = UrlParameter.Optional }
);
答案 0 :(得分:0)
您正在混合MVC和Web API路由属性和路由配置。查看您用于属性的名称空间。
RoutePrefix
使用正确的命名空间,而其他人没有。
更新控制器
using System.Web.Http;
[RoutePrefix("api/ticket")]
public class TicketController : ApiController {
private readonly ITicketService _TicketService = new TicketService();
//GET api/ticket/Prepare/123456789
[HttpGet]
[Route("Prepare/{number}")]
public TicketViewModel Prepare(string number) {
//...
}
//...
}
没有:string
路由约束,因为字符串是默认值。
对于配置,Web API配置通常位于WebApiConfig.Register
函数中,您可以在其中启用属性路由并配置任何基于约定的路由。
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}