无法找到资源 - .net web api

时间:2017-12-02 13:41:49

标签: c# .net asp.net-web-api asp.net-web-api-routing

我已经尝试了一段时间来制作休息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 }
);

1 个答案:

答案 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 }
        );
    }
}

参考Attribute Routing in ASP.NET Web API 2